当我使用asp.net mvc 3脚手架制作清单时。我有一个包含表格的视图。该表的标题在视图中硬编码。我想使用LabelFor,所以我得到了我需要的l10n。
我尝试做的事情(但失败了)是:
@model IEnumerable<User>
<table>
<tr>
<th>
@(Html.LabelFor<User, string>(model => model.Name)) <!--This line errors-->
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
</table>
错误“IEnumerable不包含Name的定义”等等......
我如何使这项工作?
答案 0 :(得分:19)
尝试使用
@(Html.LabelFor<User, string>(model => model.FirstOrDefault().Name))
答案 1 :(得分:5)
您的视图模型不适合您要实现的目标。以下是更好的视图模型的样子:
public class MyViewModel
{
// This property represents the header value
// you could use data annotations to localize it
[Display(.. some localization here ..)]
public string NameHeader { get; set; }
// This property represents the data source that
// will be used to build the table
public IEnumerable<User> Users { get; set; }
}
然后:
@model MyViewModel
<table>
<tr>
<th>
@Html.LabelFor(x => x.NameHeader)
</th>
</tr>
@foreach (var item in Model.Users) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
</tr>
</table>
使用显示模板,您甚至不需要编写foreach
循环:
@model MyViewModel
<table>
<tr>
<th>
@Html.LabelFor(x => x.NameHeader)
</th>
</tr>
@Html.DisplayFor(x => x.Users)
</table>
并在自定义显示模板(~/Views/Shared/DisplayTemplates/User.cshtml
)内:
@model User
<tr>
<td>@Html.DisplayFor(x => x.Name)</td>
</tr>
答案 2 :(得分:0)
您在foreach迭代之前(或之外)呈现Label,因此您尝试访问不存在的IEnumerable集合中的Name属性。
答案 3 :(得分:0)
改为使用DisplayNameFor @ Html.DisplayNameFor(model => model.Name)