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

问题描述

为了使读取的JSON字符串转换为查询对象,用了JsonModelBinder方法:publicclassJsonModelBinder:IModelBinder{publicobjectBindModel(ControllerContextcontrollerContext,ModelBindingContextbindingContext){if(controllerContext!=null&&bindingContext!=null){varserializer=newDataContractJsonSerializer(bindingContext.ModelType);returnserializer.ReadObject(controllerContext.HttpContext.Request.InputStream);}returnnull;}}

页面段的提交方法为:varjsonData=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)]publicJsonResultSearchTrainingByAjax(JsonTrainingSearchRequestrequest){returnJson(request);}

JsonTrainingSearchRequest类定义为:[ModelBinder(typeof(JsonModelBinder))]publicclassJsonTrainingSearchRequest{publicintSelectCategoryId{get;set;}publicintCurrentPage{get;set;}publicDateTimeStartTime{get;set;}publicDateTimeEndTime{get;set;}}

但在JsonModelBinder方法中controllerContext.HttpContext.Request.InputStream读取到的参数总是空啊!怎么回事呢?弄了一周了都没弄出来,能试的方法都试了。大家给看看啊补充一张执行Ajax时提交的json字符串图

解决方案

本帖最后由 woshimaikou 于 2013-12-31 23:08:07 编辑
解决方案二:
不需要用modelbinder,请求的内容类型是json的时候,框架自然会反序列化。
解决方案三:
SelectCategoryId是字符串
解决方案四:
引用1楼KarasCanvas的回复:

不需要用modelbinder,请求的内容类型是json的时候,框架自然会反序列化。

你的意思我把 JsonModelBinder这个类直接去掉就可以了吗?
解决方案五:
引用2楼caozhy的回复:

SelectCategoryId是字符串

是啊JSON.stringify({ "SelectCategoryId": selectCategory, "CurrentPage": page, "StartTime": startTime, "EndTime": entTime }); 这个后的结果
解决方案六:
蹭个分参考
解决方案七:
直接这样反序列化就可以了varjson=newDataContractJsonSerializer(typeof(JsonTrainingSearchRequest));vartraining=(JsonTrainingSearchRequest)json.ReadObject(Request.InputStream);returntraining;//当然JsonTrainingSearchRequest要加上[Serializable]属性

时间: 2024-10-26 20:06:38

好几天都没弄出来,MVC中 自定义IModelBinder问题的相关文章

Spring MVC 中自定义视图 @Component 及 配置 多个视图解析器 Excel视图

首先我们建立一个自己的View实现View接口.要注意在类上面加上@Component的注解,因为看BeanNameViewResolver的源码知道,是直接从ioc容器里面拿的根据名字拿的视图,所以我们得把我们自己写的视图放到容器里面. HelloView.java package com.hust.springmvc.views; import java.util.Date; import java.util.Map; import javax.servlet.http.HttpServle

Asp.net Mvc Framework 十一 (自定义Helper在MVC中的使用)

Monorail中的Helper是绑定在Controller上的 形如: [Helper(typeof(ChHelper))] abstract public class BaseBlockController : SmartDispatcherController{ }但本身Helper是使用在View中的,所以 Monorail这种定义方式 略微违背了分离之道 那么Asp.net MVC中是如何绑定自定义的Helper的呢? 其实Asp.net MVC的View也有代码文件即类似 index

指针-关于二维数组a中,a[1] 与 &a[1]相等的一个疑问?(从来没弄懂)

问题描述 关于二维数组a中,a[1] 与 &a[1]相等的一个疑问?(从来没弄懂) 对二维数组a[][]来说,a[1] 与 &a[1]相等.我来分析一下我的误解: 首先,a[m] 里面的内容是一个一维数组的首地址. 而 &a[m] 是 a[m] 的地址,它们相等. 说明 a[m] 的内容其实就是他本身的地址编号 (把 a[m] 看成一个变量) 对于一个内容就是地址的变量m,&m 与 m 相等 毋庸置疑. 然而 &a[m][0] 也等于 a[m] 说明 a[m][0]

kendo ui-关于Kendo 在MVC中如何自定义编辑模板??

问题描述 关于Kendo 在MVC中如何自定义编辑模板?? 我在点插入是,弹出的编辑框了 的内容是整个Model的属性,我想只显示部分(即Model里部分属性才可编辑),求大神指点!! 解决方案 http://blog.csdn.net/mapdigit/article/details/9440783

Spring MVC中基于自定义Editor的表单数据处理技巧分享_java

面向对象的编程方式极大地方便了程序员在管理数据上所花费的精力.在基于Spring MVC的Web开发过程当中,可以通过对象映射的方式来管理表单提交上来的数据,而不用去一个一个地从request中提取出来.另外,这一功能还支持基本数据类型的映射.例如in.long.float等等.这样我们就能从传统单一的String类型中解脱出来.然而,应用是灵活的.我们对数据的需求是千变万化的.有些时候我们需要对表单的数据进行兼容处理. 例如日期格式的兼容: 中国的日期标注习惯采用yyyy-MM-dd格式,欧美

ASP.NET MVC:自定义 Route 以生成小写的 Url

先给出本文中测试用的 controller: public class PersonsController : Controller { public ActionResult Query(string name) { return View(); } } ASP.NET 中 Url 大小写 不严格来讲,ASP.NET MVC 对 Url 是不敏感的,以下 Url 都是相同的,都可以访问到 PersonController 的 Query 方法: ~/Persons/Query ~/PERSON

包含在ASP.NET MVC中的过滤器

在深入研究如何编写过滤器之前,首先看看包含在ASP.NET MVC中的过滤器. ASP.NET MVC包括了如下3种即开即用的动作过滤器: Authorize:该过滤器用于限制对控制器或控制器动作的访问. HandleError:该过滤器用来指定一个处理异常的动作,这个异常是从动作方法的内部抛出的. OutputCache:该过滤器用来为动作方法提供输出的缓存. 接下来将依次深入讨论这3个过滤器. 1  Authorize AuthorizeAttribute是包含在ASP.NET MVC中默认

一起谈.NET技术,ASP.NET MVC:自定义 Route 以生成小写的 Url

先给出本文中测试用的 controller: public class PersonsController : Controller{public ActionResult Query(string name) {return View(); }} ASP.NET 中 Url 大小写 不严格来讲,ASP.NET MVC 对 Url 是不敏感的,以下 Url 都是相同的,都可以访问到 PersonController 的 Query 方法: ~/Persons/Query ~/PERSONS/QU

在MonoTouch中自定义表格

为什么要定制表格? 表格在很多iPhone应用程序中都是必需的UI元素.虽然对于应用程序开发而言,这并非是一项新发明,鉴于设备尺寸等方面的限制,表格在iPhone中的功能是非常固定的. 苹果在其SDK中,直接内置了很多风格来让你定制表格.不过,在你最初创建表格的时候,它看起来非常简单.在没有进行任何定制的时候,你可以为表格选择两种基本风格,默认风格和分组风格: 在对表格中的单元格进行一点调整后,你就可以添加图标和说明文字: 你甚至能改变单元格的字体和颜色,然而,有时候这样还是不足够.如果你真的想