ASP.NET MVC:如何显示强类型视图模型,包含项目列表,其中还包含项目列表?

时间:2010-04-01 10:36:19

标签: asp.net-mvc

我正在使用ASP.NET MVC构建应用程序,我想使用强类型视图模型,其中包含List< Item>调用包含id int和itemName字符串的项目。视图模型还包含List< Person>称为people,Person类包含List< int>。

我想要显示信息的方式是一个表,每行包含一个Person name列,然后是n个包含复选框的列,每个列对应一个List< Item>,并根据是否检查人员名单< int> (称为items)包含Item的id。

我的显示工作正常,但我很难理解如何命名项目,以便发布的方法可以读取数据。

这就是我在BeginForm中所拥有的:

        <table cellpadding="20">
            <thead>
                <th>Person name</th>

                      <!-- for each of the items, create a column with the item name -->
                <% foreach( var i in Model.items ) { %>
                <th><%= Html.Encode(i.itemName) %></th>
                <% } %>

            </thead>

        <% foreach( var p in Model.people ) { %>

            <tr>
                <td><%= Html.Encode(p.name) %></td>

         <!-- for each item, create a column with a checkbox -->
                <% foreach( var i in Model.items ) { %>
                <td>
                <% if( p.items.Contains(i.id) ) { %>
                   <!-- vm is the name of the view model passed to the view -->
                    <%= Html.CheckBox( "vm.people[" + p.id + "].items[" + i.id + "]", true ) %>
                <% } else { %>
                    <%= Html.CheckBox( "vm.people[" + p.id + "].items[" + i.id + "]", false ) %>
                <% } %>
                </td>
                <% } %>
            </tr>

        <% } %>
        </table>

此代码完美显示信息。但是,当我单击提交时,我收到一个Object Reference Not Set ..错误消息。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:3)

我自己已经解决了这个问题,这总是比给出答案更有价值......

这是我犯的一个愚蠢的错误:

我改变了

<% foreach( var p in Model.people ) { %>

<table cellpadding="20">

<thead>

<th>Person name</th>

<!-- for each of the items, create a column with the item name -->

<% foreach( var i in Model.items ) { %>

<th><%= Html.Encode(i.itemName) %></th>

<% } %>

</thead>

<% for( int p = 0; a<Model.people.Count; p++){ %>

<% var person = Model.people[p]; %>

然后在创建复选框时使用它:

<% if( person.items.Contains(i.id) ) { %>

<%= Html.CheckBox( "vm.people[" + p + "].items[" + i.id + "]", true ) %>

<% } else { %>

<%= Html.CheckBox( "vm.people[" + p + "].items[" + i.id + "]", false ) %>

<% } %>