好几天都没弄出来,MVC中 自定义IModelBinder问题

woshimaikou 2013-12-31 10:59:55
为了使读取的JSON字符串转换为查询对象,用了JsonModelBinder方法:
 public class JsonModelBinder:IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (controllerContext != null && bindingContext != null)
{
var serializer = new DataContractJsonSerializer(bindingContext.ModelType);
return serializer.ReadObject(controllerContext.HttpContext.Request.InputStream);
}
return null;
}
}

页面段的提交方法为:

var jsonData = JSON.stringify({ "SelectCategoryId": selectCategory, "CurrentPage": page, "StartTime": startTime, "EndTime": entTime });
$.ajax({
url:"/Home/SearchTrainingByAjax",
data: jsonData,
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (date) {
alert(“success”);
}
});

对应的Acion为:
 
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult SearchTrainingByAjax(JsonTrainingSearchRequest request)
{
return Json(request);
}

JsonTrainingSearchRequest 类定义为:

[ModelBinder(typeof(JsonModelBinder))]
public class JsonTrainingSearchRequest
{
public int SelectCategoryId { get; set; }

public int CurrentPage { get; set; }

public DateTime StartTime { get; set; }

public DateTime EndTime { get; set; }
}

但在JsonModelBinder方法中controllerContext.HttpContext.Request.InputStream读取到的参数总是空啊!
怎么回事呢?弄了一周了 都没弄出来 ,能试的方法都试了。大家给看看啊
补充一张执行Ajax时提交的json字符串图
...全文
856 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhusongwen 2014-01-06
  • 打赏
  • 举报
回复
直接这样反序列化就可以了 var json = new DataContractJsonSerializer(typeof(JsonTrainingSearchRequest)); var training = (JsonTrainingSearchRequest)json.ReadObject(Request.InputStream); return training; //当然JsonTrainingSearchRequest要加上[Serializable]属性
newtee 2014-01-05
  • 打赏
  • 举报
回复
threenewbee 2014-01-01
  • 打赏
  • 举报
回复
SelectCategoryId 是字符串
woshimaikou 2014-01-01
  • 打赏
  • 举报
回复
引用 2 楼 caozhy 的回复:
SelectCategoryId 是字符串
是啊 JSON.stringify({ "SelectCategoryId": selectCategory, "CurrentPage": page, "StartTime": startTime, "EndTime": entTime }); 这个后的结果
woshimaikou 2014-01-01
  • 打赏
  • 举报
回复
引用 1 楼 KarasCanvas 的回复:
不需要用modelbinder,请求的内容类型是json的时候,框架自然会反序列化。
你的意思我把 JsonModelBinder这个类直接去掉就可以了吗?
种草德鲁伊 2013-12-31
  • 打赏
  • 举报
回复
不需要用modelbinder,请求的内容类型是json的时候,框架自然会反序列化。

62,017

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧