失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 6 ----asp.net MVC+Extjs

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

时间:2018-11-14 04:35:42

相关推荐

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

现在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整合和mvc,以及在web层利用

log4net记录错误信息等,这些内容都可以直接通过demo程序中看到.如果发现问题,请直接和我联系.最后,再展示一下demo的程序的劳动成果,

漂亮的extjs界面以及demo功能.

代码下载.

数据库表创建脚本.

作者:孤独侠客(似水流年)

出处:

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

分类: .NET 标签: , mvc, ExtJs, Nhibernate, Ajax, IModelBinder, DefaultModelBinder, JsonModelBinder

本文转自孤独侠客博客园博客,原文链接:/lonely7345/archive//02/03/1382780.html,如需转载请自行联系原作者

如果觉得《Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 6 ----asp.net MVC+Extjs》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。