2011-01-28 45 views
2

MVC 3与关于局部视图的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应用程序IM与学习演奏。我不能得到一个部分显示回复:/

如果我添加部分我得到'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

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

试试这个:

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

我假设你的消息对象有一个回复属性。如果消息没有任何回复,请不要忘记在局部视图中进行空检查。