我正在构建一个应用程序,其中包含一个简单的表格,可以在帖子中添加注释。
作为我项目中的其他组件允许用户提交评论并使用此表格,我决定在部分视图中包含该表单,例如:
@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
)将从您的视图或表单操作传递给控制器。