从列表中的项目中的Foreach属性

时间:2013-09-13 21:15:02

标签: asp.net-mvc-4 razor foreach

我正在改进一个小型的帮助台应用程序(从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,如果这有任何区别的话。

2 个答案:

答案 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>
}