MVC:以下方法或属性之间的调用不明确

时间:2015-02-06 16:25:42

标签: c# asp.net-mvc

我从以下代码收到此错误,在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来访问同事,但在任何在线示例中我都看到你应该能够以这种方式访问​​发送到视图的模型列表。

3 个答案:

答案 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>

:)