MVC 3 с Razor вопрос о частичных взглядах - PullRequest
2 голосов
/ 28 января 2011

MVC 3 с вопросом Razor о частичных представлениях.

У меня есть это:

@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 ....

Серьезный контрольно-пропускной пункт в моем способе изучения любогопомочь?

1 Ответ

4 голосов
/ 28 января 2011

Когда вы делаете вызов для рендеринга частичного представления, которое принимает другую модель, вам нужно передать модель в это представление. Поведение по умолчанию состоит в том, что частичное представление будет использовать ту же модель, что и вызывающее ее представление, но в вашем случае это не сработает, поскольку модели отличаются.

Попробуйте это:

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

Я предполагаю, что у вашего объекта Message есть свойство Replies. Не забудьте выполнить нулевую проверку при частичном просмотре, если на сообщение нет ответов.

...