Asp.net MVC将列表实体列表发布到表单中

时间:2012-10-05 19:12:12

标签: asp.net-mvc list post

我知道将列表发布到表单的方法,参考的链接是http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

我有一个场景,我需要发布List>,通过使用上面链接中提到的代码,我得到了帖子中的值。

生成的html如下:


<input class="input-micro valid" min="1" name="posItems[0][0].Quantity" required="required" value="30" type="text">
<input class="input-micro valid" min="1" name="posItems[1][0].Quantity" required="required" value="20" type="text">
<input class="input-micro valid" min="1" name="posItems[2][0].Quantity" required="required" value="20" type="text">

<input class="input-micro valid" min="1" name="posItems[0][1].Quantity" required="required" value="20" type="text">
<input class="input-micro valid" min="1" name="posItems[1][1].Quantity" required="required" value="50" type="text">
<input class="input-micro valid" min="1" name="posItems[2][1].Quantity" required="required" value="20" type="text">

我的帖子操作就像

public ActionResult Save(List posItems)

当列表具有相同数量的项目或者您可以说两个列表具有相同的计数时,这很有效。

当第二个列表中的计数超过第一个列表时,我不会从第二个列表中获取其他值。

请参阅下面的示例,其中第二个列表比第一个列表多1个项目。


<input class="input-micro valid" min="1" name="posItems[0][0].Quantity" required="required" value="30" type="text">
<input class="input-micro valid" min="1" name="posItems[1][0].Quantity" required="required" value="20" type="text">
<input class="input-micro valid" min="1" name="posItems[2][0].Quantity" required="required" value="20" type="text">

<input class="input-micro valid" min="1" name="posItems[0][1].Quantity" required="required" value="20" type="text">
<input class="input-micro valid" min="1" name="posItems[1][1].Quantity" required="required" value="50" type="text">
<input class="input-micro valid" min="1" name="posItems[2][1].Quantity" required="required" value="20" type="text">
<input class="input-micro valid" min="1" name="posItems[3][1].Quantity" required="required" value="114" type="text">

2 个答案:

答案 0 :(得分:0)

你在谈论一个二维数组。为了使项目1处于二维数组中,您必须具有项目0.因为没有[3] [0],所以不能有3 [1]。这就是数组如何工作而你无法改变它。

您唯一的选择a)不使用多维数组或b)创建[3] [0]

答案 1 :(得分:0)

CSHTML:

<ul>
        <li><input type="text" name="Items[0].Name" /></li>
        <ul>
            <li><input type="text" name="Items[0].SubItems[0].Name" /></li>
            <li><input type="text" name="Items[0].SubItems[1].Name" /></li>
            <li><input type="text" name="Items[0].SubItems[2].Name" /></li>
        </ul>
    </ul>
    <ul>
        <li><input type="text" name="Items[1].Name" /></li>
        <ul>
            <li><input type="text" name="Items[1].SubItems[0].Name" /></li>
            <li><input type="text" name="Items[1].SubItems[1].Name" /></li>
            <li><input type="text" name="Items[1].SubItems[2].Name" /></li>
        </ul>
    </ul>