我試圖將ASP.NET MVC項目從直觀視圖和模型更改爲使用ViewModel中間層。基本上,我在做什麼包括有人與零或更多事件與他們相關聯。我將更改爲ViewModel,因爲我想在人詳細信息頁面上顯示部分視圖,該頁面顯示所有關聯的事件。如何配置ViewModel和部分頁面以包含IEnumerable
我有事件一個人模型類和一個,這是我的ViewModel:
public class PersonEventViewModel
{
public PersonEventViewModel(Person person)
{
Person = person;
}
public Person Person { get; set; }
public IEnumerable<Event> Events { get; set; }
}
這種轉換我的單記錄頁的罰款。在諸如人物細節等頁面上,我必須更改@Html.DisplayFor(model => model.CreatedOn)
這樣的線條到@Html.DisplayFor(model => model.Person.CreatedOn)
,以便它可以正確找到屬性,但它工作正常。然而,在我試圖製作的部分視圖中,似乎無法讓它們在那裏顯示模型的屬性。它看起來或多或少是這樣的:
@model IEnumerable<Proj.ViewModels.PersonEventViewModel>
<table class="table">
<tr>
<th>@Html.DisplayNameFor(model => model.RecordedOn)</th>
<th>@Html.DisplayNameFor(model => model.RecordedBy)</th>
<th>@Html.DisplayNameFor(model => model.Comments)</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>@Html.DisplayFor(modelItem => item.RecordedOn)</td>
<td>@Html.DisplayFor(modelItem => item.RecordedBy)</td>
<td>@Html.DisplayFor(modelItem => item.Comments)</td>
</tr>
}
這個工作時,它是直接使用活動的模式,但現在它似乎沒有什麼事,我把在model
和物業之間,它總是告訴我,它無法解決它。
此外,我不知道如何將ViewModel傳遞到局部視圖。我還沒有想出什麼要放在這裏:
@Html.RenderPartial("_PersonEventList", ?????)
我通過模型或模型信息的各種嘗試都遇到了錯誤。
根據要求,這是我的詳細信息頁面的來源,我試圖放置事件的部分視圖。
@model Proj.ViewModels.PersonEventViewModel
@{ ViewBag.Title = "Details"; }
<h2>Details</h2>
<div>
<h4>Person</h4> <hr/>
<dl class="dl-horizontal">
<dt>@Html.DisplayNameFor(model => model.Person.FirstName)</dt>
<dd>@Html.DisplayFor(model => model.Person.FirstName)</dd>
@*...and so on through the fields...*@
</dl>
</div>
<p> @Html.ActionLink("Edit Record", "Edit", new {id = Model.Person.PersonId}) </p>
@Html.RenderPartial("_PersonEventList", Model)
你嘗試過這樣的@ Html.RenderPartial( 「_ PersonEventList」(名單)ViewBag.data) –
我沒有,但仍然給我一個錯誤,類似於之前所說的:'不能將類型'void'隱式轉換爲'object'。表達式必須返回一個值來呈現.' – techturtle
嘗試類似這樣的操作,@ Html.Partial(「View」,Model); @ {HTML。RenderPartial(「viewName」,Model));} –