我从以下代码收到此错误,在displaynamefor行 -
@model IEnumerable<AppsByBusiness2.Models.Colleague>
@using Web.Extensions
<h2>Colleagues</h2>
<table class="table">
@{var dummy = Model.FirstOrDefault(); }
<tr>
<th>
@Html.DisplayNameFor(z => dummy.FirstName)
</th>
我试图以这种方式显示模型的列名称,因为当模型列表过去而不仅仅是单个模型时,你无法以标准方式执行,或者至少我找不到方法。这是另一个线程给出的解决方案。
也许无关,但我也无法通过做Model.Colleague来访问同事,但在任何在线示例中我都看到你应该能够以这种方式访问发送到视图的模型列表。
答案 0 :(得分:6)
如果您的模型是IEmumerable<T>
,则不需要创建dummy
变量,因为DisplayNameFor
的重载需要IEnumerable<T>
:< / p>
@model IEnumerable<AppsByBusiness2.Models.Colleague>
@using Web.Extensions
<h2>Colleagues</h2>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(m => m.FirstName)
</th>
答案 1 :(得分:5)
您的DisplayNameFor应该引用模型,而不是变量。另请注意,Model.FirstOrDefault()
可能返回null,因此dummy.FirstName
会抛出异常。因此,您需要决定如何处理异常,然后通过将FirstOrDefault更改为First或使用if语句仅在Model.Any()
使用该代码来相应地修改以下内容。
@model IEnumerable<AppsByBusiness2.Models.Colleague>
@using Web.Extensions
<h2>Colleagues</h2>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(z => z.FirstOrDefault().FirstName)
</th>
答案 2 :(得分:-1)
由于您有列表,您可以循环遍历模型
中的所有条目@foreach(var dummy in Model){
<tr>
<th>
@Html.DisplayNameFor(z => dummy.FirstName)
</th>
<th>
...(other controls)
</th>
}
甚至你可以设置分组......
@foreach(var dummy in Model.GroupBy(m => m.FirstName)){
<tr>
<th>
@Html.DisplayNameFor(z => dummy.FirstOrDefault().FirstName)
</th>
<th>
...(other controls)
</th>
}
或只是
<tr>
<th>
@Html.DisplayNameFor(z => z.FirstOrDefault().FirstName)
</th>
<th>
...(other controls)
</th>
或
<tr>
<th>
First Name
</th>
:)