使用 foreach 在列表中显示
DisplayFor in list using foreach
这是我的控制器:
public ActionResult Details(int? id)
{
if (id == null)
{
return RedirectToAction("Index");
}
var cor_pay_schedules = db.COR_PAY_SCHEDULES.Where(x=> x.PAY_SCHEDULE_GROUP_ID == id).ToList();
if (cor_pay_schedules == null)
{
return HttpNotFound();
}
return View(cor_pay_schedules);
}
并且,查看:
@model IEnumerable<PartnerShips.COR_PAY_SCHEDULES>
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<div>
<h4>TMP_UNI_PAY_SCHEDULES</h4>
<hr />
<dl class="dl-horizontal">
@foreach (var q in Model)
{
<dt>
@Html.DisplayNameFor(modelItem => q.BEGIN_DATE)
</dt>
<dd>
@Html.DisplayFor(modelItem => q.BEGIN_DATE)
</dd>
<dt>
@Html.DisplayNameFor(modelItem => q.END_DATE)
</dt>
<dd>
@Html.DisplayFor(modelItem => q.END_DATE)
</dd>
<dt>
@Html.DisplayNameFor(modelItem => q.AMOUNT_PERCENTAGE)
</dt>
<dd>
@Html.DisplayFor(modelItem => q.AMOUNT_PERCENTAGE)
</dd>
}
</dl>
</div>
在 q
中,它正确检索列表,但抛出异常:
Compiler Error Message: CS0121: The call is ambiguous between the following methods or properties: 'System.Web.Mvc.Html.DisplayNameExtensions.DisplayNameFor(System.Web.Mvc.HtmlHelper>, System.Linq.Expressions.Expression>)' and 'System.Web.Mvc.Html.DisplayNameExtensions.DisplayNameFor,System.DateTime>(System.Web.Mvc.HtmlHelper>, System.Linq.Expressions.Expression,System.DateTime>>)'
怎么了?
简单改变
@model IEnumerable<PartnerShips.COR_PAY_SCHEDULES>
至
@model List<PartnerShips.COR_PAY_SCHEDULES>
基本上 George 发生的事情是 Ienumerable 不喜欢当你尝试
显示其模型的实际实例的属性名称。
它会希望您直接从模型中显示它,例如:
@Html.DisplayNameFor(model => model.END_DATE)
而不是显示实例中的名称
@Html.DisplayNameFor(modelItem => q.END_DATE)
我认为这是更 "correct" 的方式。
重点是字段的名称不会随着迭代而改变,所以看起来
从迭代变量中显示它相当不合逻辑。
编辑:Ienumerable 可以接收 .ToList() 它基本上只是一个支持简单迭代的列表。
这是我的控制器:
public ActionResult Details(int? id)
{
if (id == null)
{
return RedirectToAction("Index");
}
var cor_pay_schedules = db.COR_PAY_SCHEDULES.Where(x=> x.PAY_SCHEDULE_GROUP_ID == id).ToList();
if (cor_pay_schedules == null)
{
return HttpNotFound();
}
return View(cor_pay_schedules);
}
并且,查看:
@model IEnumerable<PartnerShips.COR_PAY_SCHEDULES>
@{
ViewBag.Title = "Details";
}
<h2>Details</h2>
<div>
<h4>TMP_UNI_PAY_SCHEDULES</h4>
<hr />
<dl class="dl-horizontal">
@foreach (var q in Model)
{
<dt>
@Html.DisplayNameFor(modelItem => q.BEGIN_DATE)
</dt>
<dd>
@Html.DisplayFor(modelItem => q.BEGIN_DATE)
</dd>
<dt>
@Html.DisplayNameFor(modelItem => q.END_DATE)
</dt>
<dd>
@Html.DisplayFor(modelItem => q.END_DATE)
</dd>
<dt>
@Html.DisplayNameFor(modelItem => q.AMOUNT_PERCENTAGE)
</dt>
<dd>
@Html.DisplayFor(modelItem => q.AMOUNT_PERCENTAGE)
</dd>
}
</dl>
</div>
在 q
中,它正确检索列表,但抛出异常:
Compiler Error Message: CS0121: The call is ambiguous between the following methods or properties: 'System.Web.Mvc.Html.DisplayNameExtensions.DisplayNameFor(System.Web.Mvc.HtmlHelper>, System.Linq.Expressions.Expression>)' and 'System.Web.Mvc.Html.DisplayNameExtensions.DisplayNameFor,System.DateTime>(System.Web.Mvc.HtmlHelper>, System.Linq.Expressions.Expression,System.DateTime>>)'
怎么了?
简单改变
@model IEnumerable<PartnerShips.COR_PAY_SCHEDULES>
至
@model List<PartnerShips.COR_PAY_SCHEDULES>
基本上 George 发生的事情是 Ienumerable 不喜欢当你尝试 显示其模型的实际实例的属性名称。
它会希望您直接从模型中显示它,例如:
@Html.DisplayNameFor(model => model.END_DATE)
而不是显示实例中的名称
@Html.DisplayNameFor(modelItem => q.END_DATE)
我认为这是更 "correct" 的方式。
重点是字段的名称不会随着迭代而改变,所以看起来 从迭代变量中显示它相当不合逻辑。
编辑:Ienumerable 可以接收 .ToList() 它基本上只是一个支持简单迭代的列表。