我尝试使用submit
按钮发送参数以发布操作,因此有我的示例:
@using(Html.BeginForm(actionName: "Search", controllerName: "MyController", routeValues: new { rv = "102" })) {
...
<input type="submit" value="Search" />
}
这是我的搜索行动:
[HttpPost]
public virtual ActionResult Search(string rv, FormCollection collection) {
...
}
所以到目前为止,每件事都很好,
然后我尝试发送像Dictionary<string, string>
因此,您只需将string
类型的rv
参数替换为Dictionary<string, string>
并发送字典,但在这种情况下,rv
值始终返回0字典的字典?问题出在哪儿?如何发送字典以发布操作?
更新
我也尝试过这个但尚未奏效(均值rv钢是0计数的字典):
@using(Html.BeginForm(actionName: "Search", controllerName: "MyController", routeValues: new { rv = Model.MyDictionary }, method: FormMethod.Post, htmlAttributes: new { @class = "FilterForm" })) {
...
}
[HttpPost]
public virtual ActionResult Search(Dictionary<string, string> rv, FormCollection collection) {
...
}
答案 0 :(得分:4)
您无法发送复杂对象。如果您希望能够将对象反序列化为集合或字典,请阅读following article以了解默认模型绑定器所期望的预期连线格式。
因此,在阅读了ScottHa的文章并理解字典的预期线格后,您可以滚动一个自定义扩展方法,将您的字典转换为符合约定的RouteValueDictionary:
public static class DictionaryExtensions
{
public static RouteValueDictionary ToRouteValues(this IDictionary<string, string> dict)
{
var values = new RouteValueDictionary();
int i = 0;
foreach (var item in dict)
{
values[string.Format("[{0}].Key", i)] = item.Key;
values[string.Format("[{0}].Value", i)] = item.Value;
i++;
}
return values;
}
}
然后在您的视图中,您可以使用此扩展方法:
@using(Html.BeginForm(
actionName: "Search",
controllerName: "MyController",
routeValues: Model.MyDictionary.ToRouteValues(),
method: FormMethod.Post,
htmlAttributes: new RouteValueDictionary(new { @class = "FilterForm" }))
)
{
...
}
显然,我假设Model.MyDictionary
属于IDictionary<string, string>
属性。