现在mvc采用了ModelBinder, Controller中现在可以接受很多复杂类型的参数,但是对于jquery,extjs等js框架来说,更多的是采用json格式与服务器端传递参数更合理.对于简单的参数,我们可以并不采用json格式,直接post到服务器端.比如用户登陆,我们只传递用户名和密码到Controller中:

                         handler : function CheckLogin() {if (form.isValid()) {var formvalue = form.getValues();Ext.Ajax.request({url : '/user.mvc/login',method : "POST",waitMsg : "请等待!",params : {userid : formvalue.UserID,password : formvalue.UserPassword},success : function(response, options) {var responseMessage = Ext.util.JSON.decode(response.responseText);if (responseMessage.Result) {win.destroy();window.location = "/Home.mvc/Index";} else {Ext.MessageBox.alert("消息",responseMessage.Message);}},failure : function(response, options) {Ext.MessageBox.hide();Ext.MessageBox.show({title :"登陆失败",msg : response.responseText});}});} else {form.markInvalid();Ext.MessageBox.alert("消息", "输入错误");}}

可以看到,对于userid和password的值,并没有采用Ext.util.JSON .encode加密成json格式字符串.这对应于我们上次的UserController中的Login.但是对于传输实体,也就是添加用户和更新用户的操作时,就不会那么容易了:

  [AcceptVerbs(HttpVerbs.Post)]public ActionResult AddUser(UserDTO User){.....}
 
  一种方式,我们可以采用post的方式传输User.UserName,User.UserID这种前缀+属性作为key的方式到Controller中,MVC通过
DefaultModelBinder就可以将值映射到实体参数中,但是这种方式就需要我们修改form的控件的name.另外一种方式就是我们实现
IModelBinder,添加JsonModelBinder,使前台js框架传递json对象到Controller中解析到参数中,暂且我们只做以下简单实现:
 public class JsonBinder<T> : IModelBinder{public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext){var param = new DataContractJsonSerializer(typeof(T)).ReadObject(controllerContext.HttpContext.Request.InputStream);return  param;}}
  同样,我们也需要在Global的Application_Start()中进行注册:
  ModelBinders.Binders[typeof(UserDTO)] = new JsonBinder<UserDTO>();
  这样,在前台js框架,请求User.mvc/AddUser时,就可以直接传递Json格式的数据过来,Mvc就会自动的通过JsonBinder进行json反序列化,
解析出UserDTO对象.相比于手动的去转换Reqeust中的参数,现在这种实现是不是强大了很多.
     var formvalue = Ext.util.JSON.encode(UserForm.form.getValues());Ext.Ajax.request({url : '/User.mvc/UpdateUser',method : 'POST',params : formvalue,callback : function(options, success, response) {if (success) { Ext.MessageBox.hide();var result = Ext.util.JSON.decode(response.responseText)Ext.MessageBox.alert("消息",result.Message);} else {Ext.MessageBox.hide();Ext.MessageBox.alert("失败,请重试",response.responseText);}},failure : function(response, options) {Ext.MessageBox.hide();ReturnValue = Ext.MessageBox.alert("警告","出现异常错误!请联系管理员!");},success : function(response, options) {Ext.MessageBox.hide();store.reload();}}) 
   在前台Mvc+extjs整合这部分,对于一些内容进行了省略,比如怎么具体的利用mvccontrib整合spring.net和mvc,以及在web层利用
log4net记录错误信息等,这些内容都可以直接通过demo程序中看到.如果发现问题,请直接和我联系.最后,再展示一下demo的程序的劳动成果,
漂亮的extjs界面以及demo功能.
 
 

代码下载.
数据库表创建脚本.

作者:孤独侠客(似水流年)
出处:http://lonely7345.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

分类: .NET
标签: Spring.Net, Asp.Net mvc, ExtJs, Nhibernate, Ajax, IModelBinder, DefaultModelBinder, JsonModelBinder
本文转自孤独侠客博客园博客,原文链接:http://www.cnblogs.com/lonely7345/archive/2009/02/03/1382780.html,如需转载请自行联系原作者

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 6 ----asp.net MVC+Extjs相关推荐

  1. ASP.NET温故而知新学习系列之ASP.NET多线程编程—异步编程(九)

    阅读目录 一:同步处理 二:异步处理 三:异步委托 四:通过委托同步调用方法 五:通过委托异步调用方法 一:同步处理 一个同步操作会阻塞整个当前的进程,直到这个操作完成才能执行下一段代码 二:异步处理 ...

  2. ASP.NET温故而知新学习系列之ASP.NET多线程编程—.NET下的多线程编程应用程序域(七)...

    阅读目录 一:应用程序域概述 二:应用程序域和线程的关系 三:线程跨越多个应用程序域实例 四:运行效果 一:应用程序域 . 在.NET中有个特点,在.NET中有个CLR,在操作系统和我们编程环境之间有 ...

  3. ASP.NET MVC实践系列9-filter原理与实践

    filter实际上是一个特性(attribute),它提供了一种向controller 或 action中添加某些任务的方法,当controller 或 action被调用时,会触发filter中定义 ...

  4. ASP.NET MVC实践系列11-FCKEditor和CKEditor的使用

    FCKEditor是一款强大的在线编辑器,简单实用,多浏览器兼容,免费开源,应用十分广泛,据他的官方网站上称有三百多万的下载量,而且无数的知名大公司正在使用它.所以FCKEditor是很值得信赖的,现 ...

  5. ASP.NET MVC Framework 系列

    序言 做为设计模式的王者,MVC在众多领域都成为良好的模型的代名词,从前在ASP.NET下我们只能依靠Monorail来实现ASP.NET下无控件的MVC,但是现在ASP.NET 下的MVC已经成为现 ...

  6. 解读ASP.NET 5 MVC6系列(17):MVC中的其他新特性

    原文:解读ASP.NET 5 & MVC6系列(17):MVC中的其他新特性 (GlobalImport全局导入功能) 默认新建立的MVC程序中,在Views目录下,新增加了一个_Global ...

  7. ASP.NET MVC实践系列6-Grid实现(上)

    ASP.NET MVC中不推荐使用webform的控件了,也就是说当希望列表显示数据时不能使用GridView了,很多开源软件为ASP.NET MVC实现了列表的解决方案,这些具体的解决方案我们放到下 ...

  8. 成员资格、授权 – ASP.NET MVC 4 系列

    ASP.NET MVC 不像 ASP.NET WEB FORMS 那样提供了很多自动保护机制来保护页面不受恶意用户的攻击,更明确的说,后者是致力于使应用程序免受攻击: 服务器组件对显示的值和特性进行 ...

  9. [导入]ASP.NET MVC框架开发系列课程(1):MVC模式与ASP.NET MVC框架概述.zip(8.80 MB)

    讲座内容: ASP.NET MVC框架是既ASP.NET WebForms后的又一种开发方式.它提供了一系列优秀特性,使ASP.NET开发人员拥有了另一个选择.本次课程将对MVC模式ASP.NET M ...

最新文章

  1. 联想笔记本Ideapad(flex 2)进入BIOS设置U盘启动的详细步骤
  2. [I2C]I2C总线协议图解
  3. 虚拟机拷贝数据到服务器,虚拟机文件拷到u盘上
  4. 笔记整理之 SHELL 变量
  5. SpringBoot指南(四)——RESTful风格
  6. 百度强化学习之Policy learning
  7. C++基础::shared_ptr 编程细节(二)
  8. atitit.Atitit.检测文本文件的编码 java  与php版  。Net
  9. 知产新观察 | 商家要敢于向知产流氓及恶意投诉说不!
  10. 日语中的-简体与敬体
  11. 你好,Googler!
  12. cvpr 深度估计_近两年 CVPR ICCV ECCV 相机位姿估计、视觉定位、SLAM相关论文汇总...
  13. OpenGL学习笔记——坐标转换
  14. 随机生成26个英文字母
  15. 让你瞬间理解HTTP状态码
  16. 华为IPsec实现支部与支部间借助总部进行隧道中转
  17. 冷暖自知!看完这篇区块链媒体舆情报告,想说点啥?
  18. oracle数据库性能awr,Oracle数据库性能调优-AWR讲述详细分析指南之一
  19. 释放自我,展现18岁青春色彩:自然堂举办重拍毕业照活动
  20. XP终端服务远程登录批处理(邪恶八进制blog)

热门文章

  1. SybaseIQ - 建库、建表、启动
  2. IT人的学习方法论-续集 关于英语的学习
  3. 新年新气象,祝所有朋友心想事成
  4. java有不过_不过而而
  5. Swift 1.1语言函数参数的特殊情况本地参数名外部参数名
  6. java面试填空题 jsp_JSP基本面试的试题
  7. centos7 docker-compose安装_Docker Compose 搭建 Redis Cluster 集群环境
  8. 苹果运行内存比较_决定手机流畅度到底是看CPU还是运行内存,你知道么?
  9. javascript扩展插件alook_使用 Kotlin 编写你的第一个 Firefox WebExtension 扩展
  10. Oculus为VR视频发明了新时间单位「flick」