我正在改进一个小型的帮助台应用程序(从ASP经典转向MVC4)。这是我的第一个完整的MVC应用程序。我选择使用Razor,我觉得它非常直观。但是我在这方面遇到了障碍。
我从数据库中获取要显示给用户的票证列表。我想要的是动态创建一个表。现在我已经手动将标题放在适当位置,这很好。但是,如果有办法动态地做到这一点,我愿意接受建议。
但关键是从票中获取每个物业。我有一个Ticket
类,有20多个属性。我将努力将那些减少到我们想要显示的最小值,但作为一个起点,我试图将它们全部放在屏幕上。
我有以下内容:
@model IList<Helpdesk4.Models.Ticket>
...
@foreach (var ticket in Model)
{
<tr>
@foreach (var item in ticket)
{
<td>item</td>
}
</tr>
}
但是我无法在票证上运行foreach
。我已经足够了,我不完全理解为什么,但我认为必须加载属性,因此默认情况下无法枚举。因此,如果不提取每个属性名称,我如何从票证中获取每个属性的值?
我正在使用NHibernate
来查询db,如果这有任何区别的话。
答案 0 :(得分:1)
如果要手动将每个属性值添加到行中,这是绝对最清晰,最简单的方法。这需要少量的“额外”工作,但这是一次性的事情,20个属性并不是那么多。它还可以更精确地控制每个属性的显示方式,右对齐还是左对齐等等。
你最终得到的是这样的
@foreach (var ticket in Model)
{
<tr>
<td>
@ticket.FirstProperty
</td>
<td class="align-right">
@ticket.SecondProperty
</td>
<td class="align-center bold">
@Html.DisplayFor(m => ticket.ThirdProperty)
</td>
<td>
<i>@ticket.FourthProperty</i>
</td>
...
</tr>
}
为了强调可定制性而添加了样式等。
祝你的第一个MVC项目好运!
答案 1 :(得分:0)
Foreach仅适用于可枚举项,而常规类不实现IEnumerable。您需要自己将每件物品放在那里。最好的方法是为每个属性使用Html.TextBoxFor(m => m.Property)
之类的东西。
编辑:
最好的方法是在对象本身上使用Html.LabelFor
。
@for(int index = 0; index < Model.Count; ++index)
{
<tr>
@Html.LabelFor(m => m[index])
<tr>
}