我有一个简单的剃刀页面,其中第一部分正确地显示了表格中模型中每个元素的信息。之后,我尝试使用DisplayFor向我展示模型中的每个属性,但每次迭代都会生成 123 。我做错了什么?
@model System.Data.Entity.IDbSet<DBFramework.MyPerson>
@{
ViewBag.Title = "Home Page";
}
<p></p>
<table border="1">
<thead>
<tr>
<th style="width:300px;">Name</th>
<th style="width:300px;">Age</th>
</tr>
</thead>
@foreach (var p in Model)
{
<tr>
<td>@Html.Label(p.Name)</td>
<td>@Html.Label(p.Age.ToString())</td>
</tr>
}
</table>
@foreach (DBFramework.MyPerson x in Model)
{
@Html.DisplayForModel(x)<br/>
}
创建以下输出:
Name Age
Mike 40
Penny 1
Kunal 30
123
123
123
答案 0 :(得分:2)
试试这个:
@foreach (var item in Model)
{
@Html.DisplayFor(model => item)
}
答案 1 :(得分:1)
DisplayFor
和DisplayForModel
与Views \ Shared \ DisplayTemplates中的模板一起使用。
当您调用DisplayForModel
时,它将采用页面模型(模型),如果您指定参数,将尝试使用提供的名称加载模板(如果是字符串)或将对象添加为附加数据ViewData
。当你打电话时:
@foreach (DBFramework.MyPerson x in Model)
{
@Html.DisplayForModel(x)<br/>
}
您告诉它 - 显示Model
类型System.Data.Entity.IDbSet<DBFramework.MyPerson>
,并在模板MyPerson
中添加ViewData
。这样做3次。您也没有给他一个选择DisplayTemplate的提示,它会尝试使用约定来查找它。
正如Bappi Datta所说,如果你想显示MyPerson
的模板,你需要打电话:
@foreach (var item in Model)
{
@Html.DisplayFor(model => item)
}
但是,您需要创建一个MyPerson
显示模板,该模板接受@model DBFramework.MyPerson
来呈现该项目,或者它默认情况下会执行.ToString(),我相信。