我正在尝试对以下控制器操作进行jquery.ajax调用:
public ActionResult Handler(SemanticPart[] semanticParts, string first, string last)
我有以下数据JSON对象,相应的服务器端模型有public {get;组; } properties:
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框架都同意的param字符串没有通用规范,但为什么传统标志设置为true的jQuery.param返回一个[object + Object]超出了我...这在任何框架中都是无用的。
有什么方法可以补丁吗?
也许是用[{1}}替换模式[#][text]
的正则表达式? (实际上这个编码版本更相关)
答案 0 :(得分:1)
您应该实现一个模型来保存这些参数:
public class SemanticPartViewModel
{
public List<SemanticPart> semanticParts { get; set;}
public string first { get; set; }
public string last { get; set;}
}
并更改控制器以接收此参数
public ActionResult Handler(SemanticPartViewModel semanticParts)
{
/*Do stuff*/
}
你也应该使用JSON.stringify(mydata)为$ .ajax调用创建数据
这样,默认的模型绑定器会处理其余部分。