我正在尝试对以下控制器操作进行 jquery.ajax 调用:
public ActionResult Handler(SemanticPart[] semanticParts, string first, string last)
我有以下数据 JSON 对象,相应的服务器端模型具有 public { get; 放; } 特性:
var data = {
semanticParts: [{ hasLabel: "label", hasType: "type", hasIndex : 0 }],
first: "first",
last : "last"
};
问题是jQuery.param似乎没有默认 MVC 模型绑定器的序列化选项。
decodeURIComponent($.param(data))
产生:
"semanticParts[0][hasLabel]=label&semanticParts[0][hasType]=type&semanticParts[0][hasIndex]=0&first=first&last=last"
像这样设置traditional
标志decodeURIComponent($.param(data, true))
会产生:
"semanticParts=[object+Object]&first=first&last=last"
MVC 的复杂数组的默认模型绑定器需要以下内容才能正确绑定(在 Fiddler Composer 中测试):
"semanticParts[0].hasLabel=label&semanticParts[0].hasType=type&semanticParts[0].hasIndex=0&first=first&last=last"
简单地使用:array[0].property=
而不是array[0][property]=
我知道没有所有 Web 框架都同意的参数字符串的通用规范,但是为什么带有传统标志设置为 true 的 jQuery.param 返回 [object+Object] 超出了我的范围......这在任何框架中都是绝对没用的。
有什么办法可以修补这个吗?
也许用正则表达式替换[#][text]
模式[#].text
?(实际上这个的编码版本更相关)