Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用jQuery$.ajax()将JSON数据传递到带有自定义绑定模型的.NET MVC操作时出现问题_Asp.net_Asp.net Mvc_Json_Jquery - Fatal编程技术网

Asp.net 使用jQuery$.ajax()将JSON数据传递到带有自定义绑定模型的.NET MVC操作时出现问题

Asp.net 使用jQuery$.ajax()将JSON数据传递到带有自定义绑定模型的.NET MVC操作时出现问题,asp.net,asp.net-mvc,json,jquery,Asp.net,Asp.net Mvc,Json,Jquery,我试图使用jQuery$.ajax()将JSON数据从客户端浏览器传递到ASP.NET MVC操作,并使用自定义ModelBinder将其绑定到.NET类 客户端JAVASCRIPT: $('#btnPatientSearch').click(function() { var patientFilter = { LastName: 'Flinstone', FirstName: 'Fred' }; var jsonData = $.toJSON(patientFi

我试图使用jQuery$.ajax()将JSON数据从客户端浏览器传递到ASP.NET MVC操作,并使用自定义ModelBinder将其绑定到.NET类

客户端JAVASCRIPT:

$('#btnPatientSearch').click(function() {

  var patientFilter = {
    LastName: 'Flinstone',
    FirstName: 'Fred'
  };

  var jsonData = $.toJSON(patientFilter);

  $.ajax({
    url: '/Services/GetPatientList',
    type: 'GET',
    cache: false,
    data: jsonData,
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    timeout: 10000,
    error: function() {
      alert('Error loading JSON=' + jsonData);
    },
    success: function(jsonData) {
      $("#patientSearchList").fillSelect(jsonData);
    }
  });
JSON数据的.NET类

[ModelBinder(typeof(JsonModelBinder))]
public class PatientFilter
{

  #region Properties

  public string IDNumber { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public string SSN { get; set; }
  public DateTime DOB { get; set; }

  #endregion
}
MVC行动

  public JsonResult GetPatientList(iPatientDoc.Models.PatientFilter patientFilter)
  {
自定义MODELBINDER

public class JsonModelBinder : IModelBinder
{
  #region IModelBinder Members

  public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
  {
    if (controllerContext == null)
      throw new ArgumentNullException("controllerContext");
    if (bindingContext == null)
      throw new ArgumentNullException("bindingContext");

    var serializer = new DataContractJsonSerializer(bindingContext.ModelType);
    return serializer.ReadObject(controllerContext.HttpContext.Request.InputStream);
  #endregion

  }
}
自定义ModelBinder调用正确,但Request.InputStream为空,因此没有数据绑定到PatientFilter对象

任何想法都值得赞赏。 克里斯

对此有些想法

  • 您使用GET请求。我认为请求主体对于GET总是空的
  • 您的PatientFilter类没有
    [DataContract]
    属性。我不确定它是否会序列化任何内容
  • 我不确定您的
    $.ajax()
    调用。我希望data选项只接受一个对象,而不是一个JSON字符串。查看后,我将尝试将processData选项设置为false
数据选项还有一个有趣的描述:

要发送到服务器的数据。如果尚未转换为字符串,则会将其转换为查询字符串。它被附加到GET请求的url。请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,jQuery用相同的键序列化多个值,即{foo:[“bar1”,“bar2”]}变成“&foo=bar1&foo=bar2”


我做了你所有的3个建议,现在它起作用了。我将对每一项进行进一步调查,以了解每一项对流程的影响。