2

带有 Razor 的 MVC 3 关于部分视图的问题。

我有这个 :

@model MvcGroupie.Models.Message

@{
    ViewBag.Title = "Details";
}

<h2>Details</h2>

<fieldset>
    <legend>Message</legend>

    <div class="display-label">postCreator</div>
    <div class="display-field">@Model.postCreator</div>

    <div class="display-label">postDate</div>
    <div class="display-field">@String.Format("{0:g}", Model.postDate)</div>

    <div class="display-label">postSubject</div>
    <div class="display-field">@Model.postSubject</div>

    <div class="display-label">postBody</div>
    <div class="display-field">@Model.postBody</div>
</fieldset>

    @Html.Partial("~/Views/Shared/replyPartial.cshtml")
<p>
    @if(Model.postCreator == User.Identity.Name) {@Html.ActionLink("Edit", "Edit", new { id=Model.postID } + " | ")} 
    @Html.ActionLink("Reply", "Reply", new { id=Model.postID }) |                                                                
    @Html.ActionLink("Back to List", "Index")
</p>

对于一个非常简单的帖子和回复我正在玩的 MVC 应用程序以供学习。我无法显示部分回复:/

如果我添加部分,我会得到“MvcGroupie.Models.Message”,但这个字典需要一个“MvcGroupie.Models.Reply”类型的模型项。好的,所以你不能在同一页面上使用差异模型?第一行以@model MvcGroupie.Models.Message 开头,因此我可以访问model.postSubject 等。但是,如果我想添加回复并让人们能够从它不允许的同一页面回复,他们将属于@model MvcGroupie.Models.Reply ...

很好奇如何解决这个问题...我尝试了 @Html.Partial("~/Views/Shared/replyPartial.cshtml", Model.Reply) 但它不识别 Model.Reply ....

严重阻碍我学习的方式有什么帮助吗?

4

1 回答 1

4

当您调用渲染采用不同模型的局部视图时,您需要将模型传递给该视图。默认行为是局部视图将使用与调用它的视图相同的模型,但这在您的情况下不起作用,因为模型不同。

尝试这个:

@Html.RenderPartial("~/Views/Shared/replyPartial.cshtml", Model.Replies)

我假设您的 Message 对象具有 Replies 属性。不要忘记在部分视图中进行空检查,以防邮件没有任何回复。

于 2011-01-28T03:32:13.927 回答