MVC将一组事物绑定到不同的下拉列表

时间:2012-10-29 21:15:47

标签: asp.net-mvc data-binding

我有一个名为ItemAttributeLinks的数据库表,以及这些表的集合

Collection<ItemAttributeLink> ItemAttributeLinks

现在,在我看来,我这样做是为了将n个下拉列表绑定到此集合中的n个项目。这不起作用。 m.Item.ItemAttributeLinks中的值始终为null。下拉列表中的值显示并且都是正确的,问题是所选值不会在回发时绑定。

@{
            int i = 0;
            foreach (var type in @Model.AttributeTypes)
            {
                <section>
                    <label>@type.Text</label>
                    <div> @Html.DropDownListFor(m => m.Item.ItemAttributeLinks[i] ,Model.AttributeValuesList[Convert.ToInt32(type.Value)], "Select a value")</div>
                </section>
                i++;
            }  

ItemAttributeLink表顺便包含一个int id,一个int外键attributevalueid和一个int外键ItemId。

以这种方式绑定多个下拉列表的正确方法是什么?             }

1 个答案:

答案 0 :(得分:0)

您需要将下拉列表绑定到基本类型(例如整数,字符串,Guid,...):

@Html.DropDownListFor(
    m => m.Item.ItemAttributeLinks[i].SomePrimitiveTypeProperty,
    Model.AttributeValuesList[Convert.ToInt32(type.Value)], 
    "Select a value"
)

然后在POST控制器操作内部,将使用所选值填充基元类型。如果要获取相应的模型,则必须使用id查询数据库。

请记住,在HTML中,<select>元素(DropDownList帮助程序生成的元素)仅在提交表单时发送选定的值。您无法将其绑定到复杂类型。