2015-02-06 72 views
3

我从下面的代码收到此错误,在displaynamefor行属性之间的暧昧 -MVC:呼叫是下述方法或

@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

你能张贴你的同事类? – rajeemcariazo 2015-02-06 16:36:06

回答

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> 
+0

嗯谢谢你,完美的作品。 – user3407039 2015-02-06 16:54:03

5

如果你的模型是一个IEmumerable<T>你不需要创建dummy变量,因为没有接受一个IEnumerable<T>DisplayNameFor过载:

@model IEnumerable<AppsByBusiness2.Models.Colleague> 
@using Web.Extensions 

<h2>Colleagues</h2> 

<table class="table"> 
<tr> 
    <th> 
     @Html.DisplayNameFor(m => m.FirstName) 
    </th> 
-1

既然你有列表,您可以循环直通

@foreach(var dummy in Model){ 
    <tr> 
    <th> 
     @Html.DisplayNameFor(z => dummy.FirstName) 
    </th> 
    <th> 
     ...(other controls) 
    </th> 
} 

甚至可以设置GROUP BY ....

在模型中的所有条目
@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> 

:)