为什么DisplayForModel没有显示预期的输出?

时间:2014-01-16 16:05:40

标签: asp.net-mvc razor

我有一个简单的剃​​刀页面,其中第一部分正确地显示了表格中模型中每个元素的信息。之后,我尝试使用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 

2 个答案:

答案 0 :(得分:2)

试试这个:

@foreach (var item in Model)
    {
        @Html.DisplayFor(model => item)
    }

答案 1 :(得分:1)

DisplayForDisplayForModel与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(),我相信。