2011-01-28 29 views
2

MVC 3パーシャルビューについてのRazor質問。非常に単純なポストについてMVC 3 with Razor with partial views

@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などにアクセスできます。しかし、私は返信を追加し、人々がそれを許可しない同じページから返信することができれば、彼らは@モデルMvcGroupie.Models.Replyの下に落ちるだろう...

これを回避する方法奇妙な...私が試した@ Html.Partial( "〜/ビュー/共有/ replyPartial.cshtml"、Model.Reply)任意の助けを学習の私の方法ではなく、それはModel.Replyを認識doesntの....

深刻なバリケード?

答えて

4

異なるモデルをとる部分ビューをレンダリングするために呼び出しを行う場合は、そのビューにモデルを渡す必要があります。デフォルトの動作では、パーシャルビューは呼び出されたビューと同じモデルを使用しますが、モデルが異なるため、ケースでは機能しません。

はこれを試してみてください:

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

私はあなたのMessageオブジェクトは、回答プロパティを持っていると仮定しています。メッセージに返信がない場合は、部分ビューでヌルチェックを行うことを忘れないでください。