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

來源:互聯網
上載者:User

     現在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
本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.