将具有设置值的模型传递给部分视图

时间:2011-01-13 20:06:20

标签: asp.net-mvc

我正在使用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绑定。有什么想法吗?

3 个答案:

答案 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 %>" />