Welcome

首页 / 脚本样式 / ExtJS / Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 6 ----asp.net MVC+Extjs

Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列 6 ----asp.net MVC+Extjs2010-07-17 博客园 孤独侠客现在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;
}
}