2

部分的なビューに関するRazorの質問を含むMVC3。

私はこれを持っています:

@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」タイプのモデルアイテムが必要です。さて、同じページでdiffモデルを使用することはできませんか?最初の行は@modelMvcGroupie.Models.Messageで始まるので、model.postSubjectなどにアクセスできます。しかし、返信を追加して、同じページから返信できるようにしたい場合は、@ modelMvcGroupie.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プロパティがあると想定しています。メッセージに応答がない場合に備えて、部分ビューでnullチェックを実行することを忘れないでください。

于 2011-01-28T03:32:13.927 に答える