Javascript 如何在JQuery';什么是负荷法?

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

我正在使用jQuery的load方法调用控制器操作。但是,控制器无法序列化对象

控制器

    [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方法中的一种来支持您正在尝试的操作。