Asp.net 使用jQuery$.ajax()将JSON数据传递到带有自定义绑定模型的.NET MVC操作时出现问题
我试图使用jQuery$.ajax()将JSON数据从客户端浏览器传递到ASP.NET MVC操作,并使用自定义ModelBinder将其绑定到.NET类 客户端JAVASCRIPT: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
$('#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]
- 我不确定您的
调用。我希望data选项只接受一个对象,而不是一个JSON字符串。查看后,我将尝试将processData选项设置为false李>$.ajax()
我做了你所有的3个建议,现在它起作用了。我将对每一项进行进一步调查,以了解每一项对流程的影响。