0

我正在改进一个小型帮助台应用程序(从 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对数据库的查询。

4

2 回答 2

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 项目好运!

于 2013-09-14T05:25:14.683 回答
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>
}
于 2013-09-13T21:25:40.103 回答