是否可以将字典发布到.NET MVC操作?

Bre*_*ker 10 .net asp.net asp.net-mvc

我有一个表单,其中包含一系列字段,如:

<input type="text" name="User[123]" value="Alice" />
<input type="text" name="User[456]" value="Bob" />
...
Run Code Online (Sandbox Code Playgroud)

用户数组(123和456)的索引是与该值关联的ID.我正在尝试在控制器中更新这些值.我的想法是,将ID映射到name的Dictionary可以工作,但创建的动作如下:

public void Save(Dictionary<string, string> user) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

导致user参数为null.

那么,传递字典是否可能?或者,有另一种方法来实现这一目标吗?

wom*_*omp 12

列表是可能的,我相信它也可以用于字典.阅读Phil Haack的模型绑定到列表,了解列表绑定的工作原理.

你应该能够做到这一点:

<input type="hidden" name="User.Index" value="123" />
<input type="text" name="User[123]" value="Alice" />

<input type="hidden" name="User.Index" value="456" />
<input type="text" name="User[456]" value="Bob" />
Run Code Online (Sandbox Code Playgroud)


Lev*_*evi 7

有关绑定到字典所需的语法,请参阅http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx.请特别注意将MSFT + AAPL公司代码绑定在该帖子中间大约一半的示例.


Pav*_*uva 7

对于ASP.NET MVC 2,请使用:

<input type="hidden" name="User[0].Key" value="123" />
<input type="text" name="User[0].Value" value="Alice" />

<input type="hidden" name="User[1].Key" value="456" />
<input type="text" name="User[1].Value" value="Bob" />
Run Code Online (Sandbox Code Playgroud)

你需要一个额外的隐藏字段User [i] .Key.我是从零开始的索引.它应该是不间断的.

当你模拟绑定到字典时,你实际上绑定到一个ICollection<KeyValuePair<,>>.所以你需要User [x] .Key和User [x] .Value(重构KeyValuePair对象)

参考