我正在使用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 ..错误消息。
有人可以帮忙吗?
答案 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 ) %>
<% } %>