gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:12:42 24 4
gpt4 key购买 nike

我尝试使用 jQuery $.ajax() 将 JSON 数据从客户端浏览器传递到 ASP.NET MVC Action,并使用自定义 ModelBinder 将其绑定(bind)到 .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)
{

自定义模型绑定(bind)器

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 为空,因此没有数据可绑定(bind)到 PatientFilter 对象。

任何想法表示赞赏。克里斯

最佳答案

对此的一些想法

  • 您使用 GET 请求。我认为 GET 的请求正文始终为空
  • 您的 PatientFilter 类没有 [DataContract] 属性。我不确定它是否会序列化任何东西
  • 我不确定您的 $.ajax() 调用。我预计数据选项只会采用一个对象而不是 JSON 字符串。看完documentation ,我会尝试将 processData 选项设置为 false。

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

Data to be sent to the server. It is converted to a query string, if not already a string. It's appended to the url for GET-requests. See processData option to prevent this automatic processing. Object must be Key/Value pairs. If value is an Array, jQuery serializes multiple values with same key i.e. {foo:["bar1", "bar2"]} becomes '&foo=bar1&foo=bar2'.

关于asp.net - 使用 jQuery $.ajax() 将 JSON 数据传递到具有/自定义绑定(bind)模型的 .NET MVC 操作时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1039105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com