我希望在一个 View 中呈现一个局部 View ,因为我使用强类型 View ,所以我需要在主视图中包含两个 View 模型。
这是我的 View 模型,其中包含部分 View 使用的模型和主视图使用的模型:
public class PersonIndexViewModel
{
public PersonLookupViewModel PersonLookupViewModel { get; set; }
public List<PersonViewModel> PersonViewModel { get; set; }
}
下面是利用它的 View :
@model ViewModels.PersonIndexViewModel
@{
ViewBag.Title = "Registered People";
}
<h2>@ViewBag.Title</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
@Html.Partial("_LookupPartial", Model.PersonLookupViewModel);
<table>
<tr>
<th>
@Html.DisplayNameFor(m => m.PersonViewModel.personName)
</th>
<th>
@Html.DisplayNameFor(m => m.PersonViewModel.dob)
</th>
<th>
@Html.DisplayNameFor(m => m.PersonViewModel.address)
</th>
<th>
@Html.DisplayNameFor(m => m.PersonViewModel.internalNo)
</th>
</tr>
@foreach (var item in Model.PersonViewModel) {
<tr>
<td>
@Html.DisplayFor(i => i.PersonViewModel.personName)
</td>
<td>
@Html.DisplayFor(i => i.PersonViewModel.dob)
</td>
<td>
@Html.DisplayFor(i => i.PersonViewModel.address)
</td>
<td>
@Html.DisplayFor(i => i.PersonViewModel.internalNo)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.id }) |
@Html.ActionLink("Delete", "Delete", new { id=item.id })
</td>
</tr>
}
</table>
所以我的问题是,因为 PersonViewModel
是一个列表,所以上面的表达式似乎无法访问它们的属性。例如下面的 personName
无法识别。
@Html.DisplayNameFor(m => m.PersonViewModel.personName)
最佳答案
是的,PersonViewModel
是一个列表, List<T>
没有名为 personName
的属性.
您想要访问列表中某个项目的属性,因此:
@Html.DisplayNameFor(m => m.PersonViewModel.personName)
成为
@Html.DisplayNameFor(m => m.PersonViewModel[0].personName)
(假设您始终在列表中至少有一项)
我怀疑您也必须更改循环中的表达式...
@Html.DisplayFor(i => i.PersonViewModel.personName)
成为
@Html.DisplayFor(i => i.personName)
关于c# - 用于显示 List<model> 属性的 .NET MVC Html 助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20148849/