asp.net-mvc - ASP.NET MVC : How to display strongly typed view model, 包含项目列表,其中也包含项目列表?

标签 asp.net-mvc

我正在使用 ASP.NET MVC 构建一个应用程序,我想使用强类型 View 模型,其中包含一个名为 items 的 List ,其中包含 id int 和 itemName 字符串。 View 模型还包含一个名为 people 的 List,Person 类包含一个 List

我想要显示信息的方式是作为一个表格,每行有一列人名,然后n个包含复选框的列,每个列表一个,并根据是否进行检查Person 的 List (称为 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>

这段代码完美地显示了信息。但是,当我单击“提交”时,我收到“对象引用未设置”错误消息。

有人可以帮忙吗?

最佳答案

我自己解决了这个问题,这总是比得到答案更有值(value)......

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

我变了

<% 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 ) %>

<% } %>

关于asp.net-mvc - ASP.NET MVC : How to display strongly typed view model, 包含项目列表,其中也包含项目列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2559727/

相关文章:

asp.net-mvc - 用于业务报告的 Asp.Net MVC 选项

c# - ASP.NET MVC 上传文件超时

c# - MVC 2 DropDownList 在 List 的情况下不选择值

asp.net-mvc - 没有 CreateMap 的简单转换的 Automapper 错误

c# - 返回错误信息 vs 抛出异常

asp.net-mvc - 在 ASP.NET Core 1.1 中配置基本身份验证中间件

c# - 将属性装饰器添加到部分类

c# - 带有用于服务器端渲染的 Javascript View 引擎的 Asp.Net MVC - 服务器上的构建错误

asp.net-mvc - 在 ASP.NET MVC 组织帐户中访问 Azure AD Graph API

c# - 如何在服务中获取 Controller 的 ModelState 以进行验证