MVC 3 с вопросом Razor о частичных взглядах
-
26-10-2019 - |
Вопрос
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 '. Итак, вы не можете использовать модели DIFF на одной странице? Первая строка начинается с @model mvcgroupie.models.message, чтобы я мог получить доступ к модели.postsubject и тому подобное. Но если я захочу добавить ответы и позволить людям отвечать на той же странице, это не допускает этого, они попадут под @Model MVCGroupie.Models.Reply ...
Любопытно, как обойти это ... Я попробовал @html.partial ("~/views/shared/replypartial.cshtml", model.reply), но она не распознает model.reply ....
Серьезное контрольно -пропускное средство в моем способе изучения помощи?
Решение
Когда вы делаете призыв, чтобы отобразить частичный вид, который требует другой модели, вам необходимо передать модель с этой точки зрения. Поведение по умолчанию заключается в том, что частичное представление будет использовать ту же модель, что и вид, который ее называют, но это не сработает в вашем случае, потому что модели отличаются.
Попробуй это:
@Html.RenderPartial("~/Views/Shared/replyPartial.cshtml", Model.Replies)
Я предполагаю, что у вашего объекта сообщения есть свойство ответов. Не забудьте сделать нулевую проверку в вашем частичном представлении, если в сообщении нет никаких ответов.