在视图模型中持续存在的数据传递到部分视图中的表单,然后返回控制器



我正在构建一个应用程序,其中包含一个简单的表格,可以在帖子中添加注释。

作为我项目中的其他组件允许用户提交评论并使用此表格,我决定在部分视图中包含该表单,例如:

@model Assignment_3.ViewModels.DetailViewModel
        @using (Html.BeginForm("AddComment", "Comments", new { m = Model })) 
        {
                <div class="col-md-6">
                    <div class="form-group">
                        @Html.LabelFor(m => m.CommentSubmission.Translation, new { @class = "control-label" })
                        @Html.TextBoxFor(m => m.CommentSubmission.Translation, new { @class = "form-control" })
                    </div>
                </div>
           <div class="col-md-2">
                    <div class="form-group">
                        @Html.LabelFor(m => m.CommentSubmission.LanguageId, new { @class = "control-label" })
                        @Html.DropDownListFor(m => m.CommentSubmission.LanguageId,
                 Model.CommentSelectListItems, "", new { @class = "form-control" })
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-12">
                        <div class="form-group">
                            @Html.TextAreaFor(m => m.CommentSubmission.Body, 7, 15, new { @class = "form-control" })
                       </div>
                    </div>
                </div>
                <div class="col-md-1">
                    <input type="submit" class="btn btn-danger" value="AddComment" />
                </div>
        }

查看链接到此部分视图的链接将其ViewModel(详细信息ViewModel)传递给它。该模型包含有关帖子的信息,例如postid,这些评论与。

有关。

主视图链接到部分视图的链接:

@Html.Partial("_AddComment", Model);

用户提交后,表格称其为操作方法,返回从"帖子"页面继承的视图:

(控制器)

    [HttpPost]
    public ActionResult AddComment(DetailViewModel view)
    {
        if (ModelState.IsValid)
        {
            _context.CommentSubmissions.Add(view.CommentSubmission);
            _context.SaveChanges();
             return RedirectToAction("Detail", "Posts", new { id = view.CommentSubmission.IdiomId });
        }
        view.Init(_context);
        return View(view);
    }

我注意到的是,虽然ViewModel的确返回了以表格收集的信息返回,但它并未从帖子的详细信息视图模型中删除原始信息。因此,当我称为" RedirecttoAction"时,ID是无效的,因为有关邮政的信息已丢失。

我仍然是MVC的新手,并帮助坚持/或其他优化的方法表示赞赏。


答案(感谢Msoliman):

添加到形式:

@Html.HiddenFor(m => m.Post.PostId)

更新了控制器为:

    [HttpPost]
    public ActionResult AddTranslation(DetailViewModel view)
    {
        if (ModelState.IsValid)
        {
            view.CommentSubmission.IdiomId = view.Post.PostId;
            _context.TranslationSubmissions.Add(view.CommentSubmission);
            _context.SaveChanges();
            return RedirectToAction("Detail", "Posts", new { id = view.CommentSubmission.PostId });
        }
        //view.Init(_context);
        return View(view);
    }

我想我理解了您的问题,但是如果我误解了,请发表评论,我很乐意更新我的答案并帮助您。

,您正在尝试在您的表单仅具有注释字段时发送帖子数据,如果要添加帖子中的字段,请添加要传递到表单的数据的隐藏字段。另外,请确保您的评论视图模型具有此字段。

例如,在您的表格中添加类似的东西

@Html.HiddenFor(m => m.PostID) 

您也应该定义内部的PostID字段,即注释的视图模型(DetailViewModel)将从您的视图或表单操作传递给控制器。

相关内容

  • 没有找到相关文章

最新更新