Javascript 如何在JQuery';什么是负荷法?
我正在使用jQuery的load方法调用控制器操作。但是,控制器无法序列化对象 控制器Javascript 如何在JQuery';什么是负荷法?,javascript,jquery,asp.net-mvc,asp.net-mvc-5,Javascript,Jquery,Asp.net Mvc,Asp.net Mvc 5,我正在使用jQuery的load方法调用控制器操作。但是,控制器无法序列化对象 控制器 [HttpPost] public ActionResult GetInformation(FilterModel[] filters) { // do something } 型号 public class FilterModel { public string Field { get; set; } public string Operato
[HttpPost]
public ActionResult GetInformation(FilterModel[] filters)
{
// do something
}
型号
public class FilterModel
{
public string Field { get; set; }
public string Operator { get; set; }
public string Value { get; set; }
}
Javascript
$("#btnSave").click(function () {
var data = [];
data.push({
field: 'field 1',
operator: 'eq',
value: '1'
});
data.push({
field: 'field 2',
operator: 'eq',
value: '2'
});
$('#mycontainer').load("Home/GetInformation", data, function (response)
{
// do something
})
根据jQuery的文档
如果数据作为对象提供,则使用POST方法;否则,,
得到是假定的
所以,由于我正在传递对象,jquery正在按预期发出POST请求,但服务器无法序列化该对象
注意
1>如果我更改GetInformation()
方法以接受单个筛选器(而不是数组),如下所示
[HttpPost]
public ActionResult GetInformation(FilterModel filter)
{
// do something
}
$('#mycontainer').load("Home/GetInformation", {filters: data}, function (response)
{
// do something
})
然后更改JS脚本以发送过滤器的单个实例,然后它就可以工作了
2>如果我通过设置适当的内容类型直接使用jquery的方法发布数据(而不是使用load),那么它甚至可以与数组参数一起工作。我找到了它
我可以字符串化数据
并传递给load方法,但是,正如我前面提到的,如果数据
不是对象,则load方法将使用GET发出请求。在我的例子中,服务器正在等待POST,所以它拒绝了这样的请求
所以为了在load方法中发布数组,我必须用参数名{filters:data}
传递数据。像下面这样
[HttpPost]
public ActionResult GetInformation(FilterModel filter)
{
// do something
}
$('#mycontainer').load("Home/GetInformation", {filters: data}, function (response)
{
// do something
})
参数名称必须与操作方法的参数名称匹配
public class FilterWrapper
{
public IEnumerable<FilterModel> Filters {get;set;}
}
但为了解决我的问题,我将过滤器数组包装在包装类中。使用这种方法,我不必担心匹配参数名
public class FilterWrapper
{
public IEnumerable<FilterModel> Filters {get;set;}
}
加载Fiddler并确保传输的值符合预期。由于发送数组,您需要对数据进行字符串化并设置
contentType:'application/json'
(更易于使用$.ajax()
方法),或者需要使用索引器发送名称/值对-例如var data={field[0]:'field 1',operator[0]:'eq',…
如果我对数据进行字符串化处理,则'load'将使用GET而不是POST。此外,在load method中没有设置内容类型的选项,这就是为什么使用ajax()
更好的原因(但您可以使用$.ajaxSetup()`来配置选项,但不建议使用此选项-请参阅ajax()的第二个重载)确实有效。load()
方法是使用预先配置的设置围绕ajax
的包装方法。但是我现在很好奇为什么我不能用load发布对象?什么是immissingor…使用其他ajax方法中的一种来支持您正在尝试的操作。