问题陈述:
在MVC中,当我尝试在某个razor视图(.cshtml)中对某些字段使用LabelFor()而不是DisplayNameFor()时,它给出的错误如下:System.Collections.Generic.IEnumerable(Test.Models.TenantModel)不包含TenantID、Name、address1。。。。。但是它可以与displaynameffor()一起工作……为什么???
而不是使用:
@Html.DisplayNameFor(model => model.TenantID)
我想使用:
@Html.LabelFor(model => model.TenantID)
因为我将显示名作为LabelFor()from viewbag对象(来自db)的第二个参数传递。
请给我一些建议好吗??
视图代码:
@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,
});
}
最佳答案
我不知道这两个函数之间有什么区别,但是当您调用DisplayNameFor(model=>…)时,模型的类型是Test.model s.TenantModel,而使用LabelFor(model=>…)时,它是IEnumerable(这对我来说更有意义,因为这是您在视图中声明的)。
如果你真的想让它在你的视图中工作,你可以使用
Html.LabelFor(model => model.FirstOrDefault().TenantID)
但如果你的书包里有一个空的列表,我不确定它是否有效。
关于.net - 在MVC(Razor)中将LabelName()替换为DisplayNameFor()导致错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22378310/