ASP.NET MVC3 Razor中的动态表单

时间:2013-02-18 12:38:39

标签: asp.net-mvc razor

我有一个小问题。 我想要有一些对象的下拉列表。点击之后,我想将其添加到列表中,并使用textfield命名。我不想限制这些字段的数量。我希望在每个选定项目的控制器ID(存储在下拉列表中)和名称(由用户给出)中接收。我该怎么做? 我正在考虑将它作为文本存储在某些字段中,并在cotroller中进行解析,但我认为它并不优雅。

EDIT。 好的,Thansk的帮助,但它并没有正确地为我工作。 我生成这样的HTML:

<input type="hidden" value="96" name="Inputs[0].Key">
<input type="text" name="Inputs[0].Value">

在我的控制器中,我收到了这本字典。问题是元素的数量是正确的,但所有值都是null。这有什么不对?

2 个答案:

答案 0 :(得分:1)

在模型上使用IEnumerable<KeyPairValue<string,string>> MySelectedItem = new List<KeyPairValue<string,string>>();,将其添加到列表中时,将其命名为数组:

MySelectedItem[1].Key, MySelectedItem[1].Value, MySelectedItem[2].Key...

(我没有测试过这个,但它应该有用)

编辑:查看此博客文章,更好地解释如何执行此操作:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

答案 1 :(得分:1)

最好的方法是使用数组样式的模型绑定。

因此,对于您希望命名的每个元素,您需要创建一个隐藏字段来存储下拉值以及一个文本字段来存储用户指定的名称。您将它们命名如下:

<input type="hidden" name="element[0].Key" /><input type="text" name="name[0].Value" />

每次增加索引值。这可以通过一些JavaScript轻松实现。然后,您创建一个以KeyValuePair<string, string>[]作为参数的操作方法。然后,您将能够通过循环或LINQ表达式解析您的值。