在GET请求中绑定复杂对象的数组-jquery.praram()传统标志
Bind array of complex objects in GET request - jquery.param() traditional flag
我正在尝试对以下控制器操作进行jquery.ajax调用:
public ActionResult Handler(SemanticPart[] semanticParts, string first, string last)
我有以下数据JSON对象和具有公共{get;set;}属性的相应服务器端模型:
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
?(实际上,这个的编码版本更相关)
您应该实现一个模型来保存以下参数:
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.stringfy(mydata)为$.ajax调用创建数据
通过这种方式,默认的modelbinder将处理其余部分。
相关文章:
- 无法从 jQuery RSS Feed 中的 localStorage 动态替换类
- 如何使用jQuery自动打开页面上的所有链接
- 如何使用jquery在填充自动完成的值后使文本框只读
- jQuery:循环一个具有不同超时值的循环
- 用程序搜索JQuery数据表中的文本
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- jQuery匹配JSON对象的部分文本
- Jquery POST未填充数组
- JQuery使计数器每次更改时都会增加
- 如何在Angular2中使用jQuery插件
- 提高JQuery的性能
- 无法在通过jQuery的ajax加载的页面中执行javascript
- JQuery合并了keyup和focusout两个函数
- 如何使用jQuery选择下拉列表的值
- 将PHP变量传递给jQuery时遇到问题
- jQuery UI自动完成突然停止工作
- 剑道网格jQuery动画()问题
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- jquery点击函数select&取消选择
- 在GET请求中绑定复杂对象的数组-jquery.praram()传统标志