用MVC(Razor)中的LabelFor()替换DisplayNameFor()给出错误

时间:2014-03-13 12:13:15

标签: .net asp.net-mvc html5 asp.net-mvc-4 razor

问题陈述:

在MVC中,当我尝试在我的一个剃刀视图(.cshtml)中对某些字段使用LabelFor()而不是DisplayNameFor()时,它给出的错误如下: System.Collections.Generic.IEnumaerable(Test。 Models.TenantModel)不包含TenantID,Name,Adress1的定义.....但它适用于DisplayNameFor() ......为什么???

而不是使用:

@Html.DisplayNameFor(model => model.TenantID)

我想使用:

@Html.LabelFor(model => model.TenantID)

因为我将来自db的viewbag对象传递显示名称作为LabelFor()的第二个参数。

请建议我一些方法吗?

查看代码:

   @model IEnumerable<Test.Models.TenantModel>

    @{
        ViewBag.Title = "Index";
    }
    <h2>Tenant</h2>


    <p>
        @Html.ActionLink("Create New", "Create")
    </p>

    <table style="border-collapse: separate; border-spacing: 15px;">
        <tr>
            @foreach (var item in ViewBag.TenantControl)
            {
                for (int i = 0; i < ViewBag.TenantLanguage.Count; i++)
                {

                    if (item == "1")
                    {
                        if (i == 0)
                        {
                        <th style="text-align: center;">
                            @Html.DisplayNameFor(model => model.TenantID)
                        </th>
                            break;
                        }
                    }

                    else if (item == "2")
                    {
                        if (i == 1)
                        {
                            <th style="text-align: center;">
                                @Html.DisplayNameFor(model => model.Name)
                            </th>
                            break;
                        }
                    }


                    else if (item == "3")
                    {
                        if (i == 2)
                        {
                        <th style="text-align: center;">
                            @Html.DisplayNameFor(model => model.Address1)
                        </th>
                            break;
                        }
                    }

                    else if (item == "4")
                    {
                        if (i == 3)
                        {
                        <th style="text-align: center;">
                            @Html.DisplayNameFor(model => model.Address2)
                        </th>
                            break;
                        }
                    }

                    else if (item == "5")
                    {
                        if (i == 4)
                        {
                        <th style="text-align: center;">
                            @Html.DisplayNameFor(model => model.Address3)
                        </th>
                            break;
                        }
                    }
                    else if (item == "6")
                    {
                        if (i == 5)
                        {
                        <th style="text-align: center;">
                            @Html.DisplayNameFor(model => model.CountryID)
                        </th>
                            break;
                        }
                    }

                    else if (item == "7")
                    {
                        if (i == 6)
                        {
                            <th style="text-align: center;">
                                @Html.DisplayNameFor(model => model.StateID)
                            </th>
                            break;
                        }
                    }

                    else if (item == "8")
                    {
                        if (i == 7)
                        {
                        <th style="text-align: center;">
                            @Html.DisplayNameFor(model => model.CityID)
                        </th>
                            break;
                        }
                    }

                    else if (item == "9")
                    {
                        if (i == 8)
                        {
                        <th style="text-align: center;">
                            @Html.DisplayNameFor(model => model.Pin)
                        </th>
                            break;
                        }
                    }
                    else if (item == "10")
                    {
                        if (i == 9)
                        {
                        <th style="text-align: center;">
                            @Html.DisplayNameFor(model => model.Phone)
                        </th>
                            break;
                        }

                    }
                }
            }
            <th></th>
        </tr>

        @foreach (var item in Model)
        {
            <tr>
                @foreach (var itm in ViewBag.TenantControl)
                {
                    if (itm == "1")
                    {
                    <td style="text-align: center;">
                        @Html.DisplayFor(modelItem => item.TenantID)
                    </td>
                    }
                    else if (itm == "2")
                    {
                    <td style="text-align: center;">
                        @Html.DisplayFor(modelItem => item.Name)
                    </td>
                    }
                    else if (itm == "3")
                    {
                    <td style="text-align: center;">
                        @Html.DisplayFor(modelItem => item.Address1)
                    </td>
                    }
                    else if (itm == "4")
                    {
                    <td style="text-align: center;">
                        @Html.DisplayFor(modelItem => item.Address2)
                    </td>
                    }
                    else if (itm == "5")
                    {
                    <td style="text-align: center;">
                        @Html.DisplayFor(modelItem => item.Address3)
                    </td>
                    }
                    else if (itm == "6")
                    {
                    <td style="text-align: center;">
                        @Html.DisplayFor(modelItem => item.CountryModel.Name)
                    </td>
                    }
                    else if (itm == "7")
                    {
                    <td style="text-align: center;">
                        @Html.DisplayFor(modelItem => item.StateModel.Name)
                    </td>
                    }
                    else if (itm == "8")
                    {
                    <td style="text-align: center;">
                        @Html.DisplayFor(modelItem => item.CityModel.Name)
                    </td>
                    }
                    else if (itm == "9")
                    {
                    <td style="text-align: center;">
                        @Html.DisplayFor(modelItem => item.Pin)
                    </td>
                    }
                    else if (itm == "10")
                    {
                    <td style="text-align: center;">
                        @Html.DisplayFor(modelItem => item.Phone)
                    </td>
                    }
                }
                <td>
                    @Html.ActionLink("Edit", "Edit", new { id = item.TenantID }) |
                @Html.ActionLink("Details", "Details", new { id = item.TenantID }) |
                @Html.ActionLink("Delete", "Delete", new { id = item.TenantID })
                </td>
            </tr>
        }

    </table>

控制器代码:

 public ActionResult Index()
    {
        var result = GetTenantData();
        return View(result);
    }



public IEnumerable<TenantModel> GetTenantData()
        {
            return (from t in db.Tenant.AsEnumerable()
                    join c in db.Country.AsEnumerable() on t.CountryID equals c.CountryID
                    join s in db.State.AsEnumerable() on t.StateID equals s.StateID
                    join ct in db.City.AsEnumerable() on t.CityID equals ct.CityID
                    orderby t.Name
                    select new TenantModel()
                    {
                        TenantID = t.TenantID,
                        Name = t.Name,
                        Address1 = t.Address1,
                        Address2 = t.Address2,
                        Address3 = t.Address3,
                        CountryID = t.CountryID,
                        StateID = t.StateID,
                        CityID = t.CityID,
                        CountryModel = c,
                        StateModel = s,
                        CityModel = ct,
                        Pin = t.Pin,
                        Phone = t.Phone,

                    });
        }

2 个答案:

答案 0 :(得分:1)

我真的不知道这两个函数之间有什么区别,但是当你调用DisplayNameFor(model =&gt; ...)时,模型的类型是Test.Models.TenantModel,而使用LabelFor(model =&gt; ; ...),它是IEnumerable(这对我来说更有意义,因为那是你在视图中声明的内容)。
如果你真的想让它在你的视图中工作,你可以使用

Html.LabelFor(model => model.FirstOrDefault().TenantID)

但是如果你的Viewbag中有一个空列表,我不确定它是否正常工作。

答案 1 :(得分:0)

DisplayNameFor没有任何重载方法

public static MvcHtmlString DisplayNameFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression
)

虽然LabelFor有,但请检查: http://msdn.microsoft.com/en-us/library/system.web.mvc.html.labelextensions.labelfor%28v=vs.118%29.aspx