我正在使用ASP.NET MVC 2构建一个博客,以获得乐趣,学习并可能在将来使用它。现在我的问题是在帖子中添加评论。我有帖子详细信息显示帖子的强类型视图,我正在呈现一个强类型的PartialView,其中包含要添加新注释的表单。我想要做的是:
<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<Blog.Models.Post>" %>
<h2>Details</h2>
<fieldset>
<legend>Fields</legend>
<div class="display-field"><h2><%: Model.Title %></h2></div>
<div class="display-field">
<p><%: Model.Summary %></p>
</div>
<div class="display-field">
<p><%: Model.Content %></p>
</div>
</fieldset>
<div id="comment-section">
<% foreach (var comment in Model.Comments)
{ %>
<div>
<h3><%: comment.Title %></h3>
<p><%: comment.DateAdded %></p>
<p><%: comment.Content %></p>
</div>
<% } %>
</div>
<div>
</div>
<% Html.RenderPartial("Comment/Add", new Blog.Models.Comment { PostID= Model.ID }); %>
<p>
<%: Html.ActionLink("Edit", "Edit", new { id = Model.ID }) %> |
<%: Html.ActionLink("Back to List", "Index") %>
</p>
Add PartialView就是这个:
<% using (Html.BeginForm("Add", "Comment")) {%>
<%: Html.ValidationSummary(true)%>
<fieldset>
<legend>Add a comment</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.Title)%>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Title)%>
<%: Html.ValidationMessageFor(model => model.Title)%>
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Content)%>
</div>
<div class="editor-field">
<%: Html.TextAreaFor(model => model.Content, new { Style = "width:500px; height:150px;" })%>
<%: Html.ValidationMessageFor(model => model.Content)%>
</div>
<p>
<input type="submit" value="Add" />
</p>
</fieldset>
<% } %>
但是在我的CommentController中,当我得到发布的Comment对象时,它带有cero(0)作为PostID,所以我不能将它与它的相应Post绑定。有什么想法吗?
答案 0 :(得分:1)
表单上没有用于添加新评论的PostID。 MVC可用的唯一数据是从客户端发送的数据(表单数据/ URL数据等)。你可以有一个隐藏字段或查看当前请求的引用者,并解析PostID,假设它在URL上。我会选择隐藏的领域。
答案 1 :(得分:0)
表单操作网址是什么样的?您可能需要添加id routeValue ...
<% using (Html.BeginForm("Add", "Comment", new { id = Model.id })) {%>
答案 2 :(得分:0)
将帖子ID添加为隐藏字段...
<input type="hidden" name="PostID" value="<%: Model.ID %>" />