首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jQuery $.ajax()将JSON数据传递给带有自定义BindingModel的.NET MVC操作时出现问题

使用jQuery $.ajax()将JSON数据传递给带有自定义BindingModel的.NET MVC操作时出现问题
EN

Stack Overflow用户
提问于 2009-06-24 15:28:52
回答 1查看 8.3K关注 0票数 3

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

客户端JAVASCRIPT:

代码语言: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类

代码语言:javascript
复制
[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操作

代码语言:javascript
复制
  public JsonResult GetPatientList(iPatientDoc.Models.PatientFilter patientFilter)
  {

定制MODELBINDER

代码语言:javascript
复制
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对象。

任何想法都很感谢。克里斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-06-24 17:43:30

对此的一些思考

  • 您可以使用GET请求。我认为GET
  • 的请求主体总是空的,因为您的PatientFilter类没有[DataContract]属性。我不确定它是否会序列化
  • 的任何东西,我不确定你的$.ajax()调用。我原以为data选项只接受一个对象,而不是JSON字符串。在查看documentation之后,我会尝试将processData选项设置为false。

数据选项还有一个有趣的描述:

要发送到服务器的

数据。它将转换为查询字符串(如果还不是字符串)。它被附加到GET-requests的url中。请参见processData选项以防止此自动处理。对象必须是键/值对。如果value是数组,jQuery将序列化具有相同键的多个值,即{foo:"bar1","bar2"}变成‘&foo=bar1&foo=bar2’。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1039105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档