2013-02-18 85 views
0

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

编辑。好的,Thansk为您提供帮助,但它对我来说并不正确。 我生成html这样的:

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

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

+0

回答您的修改:如果您正在使用您发布的代码,则缺少用于输入的关闭标签。你应该这样做:''或这个'' – 2013-02-18 16:14:41

回答

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

+0

回答您的编辑:如果您正在使用您发布的代码,则缺少用于输入的关闭标签。你应该这样做:''或这个'' – 2013-02-18 16:08:07

1

最好的方式去做这件事是通过使用数组式的模型绑定。

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

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

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