精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

當ASP.NET MVC邂逅jQuery.Ajax提交數組

開發 后端
硬編碼味道太重,換個類型又得重寫,工作量跟之前比還視乎增加了,只是Controller變得優雅了。這種浪費青春又耗電的做法還是不符合要求。

當ASP.NET MVC 通過JQuery的Ajax 提交數組時,MVC的model binder機制就失效了。我們不得不在Controller里面編寫自定義代碼,將Request提交的數據轉換成需要的數據類型。這個過程往往枯燥乏味。下面以某項目的實際例子來演示如何解決這個問題,提供一個通用的解決方案。 

需求描述

當用戶更改了配置,需要Ajax提交到服務器。

前端代碼:

  1. var items = [];  
  2. $("input:checked").each(function () {  
  3.     items.push($(this).val());  
  4. });  
  5. $.ajax({  
  6.     type: 'post',  
  7.     url: 'Configure/Status',  
  8.     data: { answers: items }  
  9. }); 

后端代碼:

  1. public enum AnswerStatus  
  2. {  
  3.         Correct = 1,  
  4.         Incorrect = 2,  
  5.         Unanswered = 3 
  6. }  
  7. [HttpPost]  
  8. public ActionResult Status(IList<AnswerStatus> answers)  
  9. {  
  10.      ….  

這里的answers始終為null. 神器fiddler出場,發現用JQuery.Ajax 提交Array的數據,提交的時候始終會在名稱后面加上”[]”, 問題就出在這里。

根據發現的結果修改代碼:

  1. [HttpPost]  
  2. public ActionResult Status(IList<AnswerStatus> answers)  
  3. {  
  4.     answers = Request.Form.GetValues(“answers[]”).Select(d => d.ToEnum<AnswerStatus>(AnswerStatus.Unanswered).ToList();  

雖然這樣能夠通過解決我的問題,但每次提交Array都要這樣手工解析request,視乎一夜回到石器時代了。其實我們馬上會想到MVC 的Mode Binder。

嘗試進行***次重構:

  1. public class AnswerModelBinder : IModelBinder  
  2. {  
  3.     public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)  
  4.     {  
  5.         return controllerContext.RequestContext.HttpContext.Request.Form.GetValues(“answers[]”).Select(d => d.ToEnum<AnswerStatus>(AnswerStatus.Unanswered).ToList();      
  6.     }  

硬編碼味道太重,換個類型又得重寫,工作量跟之前比還視乎增加了,只是Controller變得優雅了。這種浪費青春又耗電的做法還是不符合要求。

進行第二次重構 : DefaultModelBinder 出場

***的DefaultModelBinder,能夠綁定任何類型,可惜就是client傳過來的name后面多加了”[]”,導致DefaultModelBinder無法準確解析。那我們能不能欺騙DefaultModelBInder呢?

查看ModelBindingContext發現有一個ModelName屬性,感覺有點像要綁定的參數的名稱,調試跟蹤發現ModelName確實就是參數的名稱,那我們修改ModelName讓他跟client傳過來的name保持一致是否就能夠充分發揮DefaultModelBinder。于是動手創建一個JQAjaxModelBinder

并繼承自DefaultModelBinder:

  1. public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)  
  2. {  
  3.     if(bindingContext.ModelType.IsEnumerable())  
  4.     {  
  5.         var key = bindingContext.ModelName + "[]";  
  6.         var valueResult = bindingContext.ValueProvider.GetValue(key);  
  7.         if(valueResult != null && !string.IsNullOrEmpty(valueResult.AttemptedValue))  
  8.         {  
  9.              bindingContext.ModelName = key;  
  10.          }  
  11.     }  
  12.     return base.BindModel(controllerContext, bindingContext);  
  13. }//如何使用自定義ModelBinder。該方法是Controller里面的Action  
  14. public ActionResult Status([ModelBinder(typeof(ModelBinder.JQAjaxModelBinder))] IList<AnswerStatus> answers)  
  15. {  
  16.     …          
  17. }  

這時,Controller里面的Status (Action)方法已經能夠正確得到前端傳來的數據。并且還是強類型的。當然很多程序員都是懶惰的,筆者也是這其中一份子。筆者連Parameter前面的參數([ModelBinder(typeof(ModelBinder.JQAjaxModelBinder))])都不想寫,那我們直接在ModelBinders里面注冊吧。其實注冊的時候也有點麻煩,必須設定Type,我那能提前知道有那些類型啊。干脆將JQAjaxModelBinder設置成默認的ModerBinder,一勞永逸,再也沒有煩心事情了。

ModelBinder不同注冊方法

通過在Action方法的參數前面添加ModelBinder標簽,上文則是采用的這種方法。

數據類型上面添加ModelBinder標簽

  1. [ModelBinder(typeof(ModelBinder.JQAjaxModelBinder))]  
  2. Public class User  
  3. {  

通過ModelBinders注冊

  1. ModelBinders.Binders.Add(typeof(User), new ModelBinder.JQAjaxModelBinder()); 

設置默認的ModerBinder

  1. ModelBinders.Binders.DefaultBinder = new ModelBinder.JQAjaxModelBinder(); 

后記: 當我們在開發的時候,經常做重復的事情,當一件事情重復多次后,我們就需要停下來認真思考,能不能將這些事情抽象出來,做一個通用的解決方案呢?一勞永逸的解決這些問題。

原文鏈接:http://www.cnblogs.com/coolite/archive/2012/12/24/JQModelBinder.html

【編輯推薦】

  1. .Net 垃圾回收和大對象處理
  2. 不改代碼就能優化ASP.NET網站性能的方法
  3. 檢測常見ASP.NET配置安全漏洞
  4. ASP.NET Web開發框架項目介紹
  5. 各自為政:ASP.NET實現團隊分工的思考
責任編輯:張偉 來源: 博客園
相關推薦

2009-07-29 16:40:50

Ajax提交asp.n

2009-07-29 09:17:12

jQuery刪除

2009-07-22 16:05:34

ASP.NET AJA

2009-07-22 16:25:41

ASP.NET AJA

2009-07-22 16:11:43

ASP.NET AJA

2009-07-24 13:41:15

ASP.NET AJA

2009-07-22 16:17:39

ASP.NET AJA

2009-07-31 12:43:59

ASP.NET MVC

2009-07-24 13:20:44

MVC框架ASP.NET

2009-08-18 17:50:37

ASP.NET MVC

2011-08-24 09:43:06

ASP.NET MVC

2009-07-20 10:16:13

配置ASP.NET A

2009-07-29 13:50:26

UpdatePanelASP.NET

2009-07-22 15:58:52

ASP.NET AJA

2009-07-31 13:24:43

ASP.NET AJA

2009-07-28 09:02:32

asp.net aja

2009-07-22 10:09:59

ASP.NET MVC

2009-07-23 15:44:39

ASP.NET MVC

2009-07-20 10:53:59

ASP.NET MVC

2009-07-22 13:24:24

ASP.NET MVC
點贊
收藏

51CTO技術棧公眾號

小说区图片区图片区另类灬| 麻豆国产va免费精品高清在线| 狠狠97人人婷婷五月| 日本不卡视频一区二区| 日韩黄色小视频| 不卡伊人av在线播放| 欧亚乱熟女一区二区在线| 午夜av成人| 亚洲黄色性网站| 欧美一区免费视频| 亚洲a视频在线| 青青草国产成人99久久| 国内精品久久久久久中文字幕| 五月天综合视频| av自拍一区| 91麻豆精品国产91久久久资源速度 | 成人福利一区| 欧美色图在线观看| 青青草国产精品视频| 蜜桃视频网站在线观看| eeuss鲁片一区二区三区在线观看| 国产精品免费福利| 天天操天天摸天天干| 亚洲五月综合| 永久免费精品影视网站| 成人在线电影网站| 欧美a在线观看| 欧美日韩免费观看一区三区| 免费成人在线视频网站| 里番在线播放| 亚洲精品网站在线观看| 日日噜噜噜噜夜夜爽亚洲精品| 免费成人在线看| 国产麻豆日韩欧美久久| 国产精品久久久久久婷婷天堂| 日韩欧美三级在线观看| 欧美在线看片| 欧美成人高清视频| 国产精品国产精品88| 欧洲美女日日| 亚洲视频在线看| 一区二区三区免费在线观看视频| 91九色鹿精品国产综合久久香蕉| 欧美美女网站色| 人人爽人人av| 亚洲精品粉嫩美女一区| 色婷婷激情久久| 精品视频一区二区在线| 免费观看亚洲| 疯狂做受xxxx高潮欧美日本| 毛片在线播放视频| 一区二区精品伦理...| 图片区小说区国产精品视频 | 久久国产直播| 奇米4444一区二区三区 | 欧美乱大交做爰xxxⅹ小说| 视频一区在线观看| 亚洲天堂av在线播放| 精品人伦一区二区三电影| 国产成人短视频在线观看| 国产午夜精品一区理论片飘花| 日韩人妻无码精品综合区| 国产九一精品| 自拍偷拍亚洲区| 永久免费看mv网站入口| 影音先锋日韩精品| 久久久久久久影院| 日韩成人免费观看| 久久国产66| 国产精品露脸av在线| 中文字幕人妻一区二区在线视频 | 一本一道波多野毛片中文在线 | 中文字幕亚洲乱码熟女1区2区| 久久精品二区三区| 国产伦精品免费视频| 国产乱人乱偷精品视频a人人澡| 国产一区二区三区久久久| www.成人三级视频| 青青青手机在线视频观看| 国产喷白浆一区二区三区| 在线观看精品视频| av福利导福航大全在线| 色综合天天性综合| 日本一二三区在线| 日韩伦理一区二区三区| 主播福利视频一区| 久久久久亚洲AV成人| 亚洲一区成人| 国产人妖伪娘一区91| 国产成人手机在线| 国产午夜亚洲精品不卡| 中国一级大黄大黄大色毛片| 日本三级一区| 制服视频三区第一页精品| 国产十八熟妇av成人一区| 第四色成人网| 97国产在线观看| 亚洲一区二区三区网站| 波多野结衣视频一区| 亚洲无玛一区| aaa在线播放视频| 欧美三级中文字| 四季av综合网站| 日本电影一区二区| 97精品国产97久久久久久免费| 日本中文字幕久久| 国产aⅴ精品一区二区三区色成熟| 欧美久久在线| 国产探花视频在线观看| 欧美午夜寂寞影院| 免费a v网站| 一区二区三区毛片免费| 国产91网红主播在线观看| www.成人免费视频| 国产精品电影一区二区| 日韩av一二三四区| 亚洲一级大片| 久久久极品av| 中文字幕精品一区二| 99精品视频一区二区三区| 亚洲国产精品二十页| 国产伦精品一区二区三区| 日本中文字幕在线2020| 色香蕉成人二区免费| 日本精品一二三区| 亚洲国产精品91| 国产精品美女久久| 精华区一区二区三区| 婷婷中文字幕综合| 日本黄色大片在线观看| 羞羞答答成人影院www| 国产精品444| 老牛影视av牛牛影视av| 亚洲精品一二三| 四虎1515hh.com| 99久久精品网| 国产精品丝袜高跟| 91涩漫在线观看| 日本高清不卡aⅴ免费网站| 毛茸茸多毛bbb毛多视频| 99在线精品免费视频九九视| 国产精品久久久久久久久久久久午夜片| 黄色网址免费在线观看| 欧美日韩大陆一区二区| 国产免费嫩草影院| 老汉av免费一区二区三区| 亚洲欧洲国产精品久久| 欧美日一区二区三区| 这里只有精品在线观看| 中文字幕一区2区3区| 国产精品视频一二三区| 午夜宅男在线视频| 天天色天天射综合网| 91久久中文字幕| 免费黄色网页在线观看| 欧美一区二区视频在线观看2022| 久久久精品少妇| 国产精品99久久久久久似苏梦涵 | 精品亚洲乱码一区二区| 国内精品伊人久久久久av一坑| 中文视频一区视频二区视频三区| 99久久这里有精品| 欧美人与物videos| 少妇av一区二区| 欧美视频一二三| 999久久久国产| 国产精品一区二区在线播放| 妺妺窝人体色www看人体| 国产成人一二片| 国产成人久久久| 日韩精品成人av| 欧美成人乱码一区二区三区| 国产黄色片视频| 久久奇米777| 亚洲免费黄色网| 综合激情视频| 精品亚洲欧美日韩| 日韩成人影音| 久久亚洲精品小早川怜子66| 精品人妻一区二区三区三区四区| 激情懂色av一区av二区av| 中文字幕有码在线播放| 九色|91porny| 免费看国产曰批40分钟| 国产一区二区三区天码| 亚洲xxxxx| 神马午夜在线视频| 久久精品99久久久久久久久| 丰满人妻一区二区三区四区53| 欧美色视频日本高清在线观看| 亚洲а∨天堂久久精品2021| 国产伦理精品不卡| av动漫在线观看| 亚洲最新色图| 日韩精品一区二区三区色偷偷| 久久久国产精品入口麻豆| 欧美在线一级va免费观看| 麻豆传媒视频在线观看| 亚洲精品www| 国产精品一区二区黑人巨大| 欧美日韩国产色视频| 免费黄色国产视频| 99久久99久久精品免费观看| 中文字幕视频三区| 亚洲免费综合| 国产日产欧美一区二区| 精品国产91乱码一区二区三区四区 | 国产91精品一区二区| 黄色三级视频在线| 日韩午夜高潮| av动漫在线免费观看| 成人免费在线观看av| 99久久久免费精品国产一区二区| 好看的日韩精品| 国产一区二区久久久久| 日韩女在线观看| 特黄毛片在线观看| 欧美激情久久久久| 蜜桃视频网站在线| 在线看片第一页欧美| 亚洲 精品 综合 精品 自拍| 欧美白人最猛性xxxxx69交| 在线观看不卡的av| 色婷婷综合久久久久中文| 日韩精品一区二区av| 亚洲乱码中文字幕| 日本 欧美 国产| 国产欧美一区视频| 在线不卡av电影| 91蝌蚪porny| 性色av蜜臀av色欲av| 成人午夜精品一区二区三区| 亚洲一级片免费观看| 黄色资源网久久资源365| 色播五月激情五月| 蜜桃视频在线一区| wwwwxxxx日韩| 蜜桃视频一区二区| 一区二区三区韩国| 蜜桃传媒麻豆第一区在线观看| 免费日韩中文字幕| 久久精品系列| www.天天射.com| 日韩精品国产欧美| 亚洲 欧美 日韩系列| 日本不卡123| 91精品无人成人www| 青青国产91久久久久久| 麻豆三级在线观看| 蜜桃久久久久久| 亚洲欧美天堂在线| 国产精品一区在线| 超碰caoprom| 久久亚洲影视婷婷| 日韩欧美黄色网址| 最新国产精品久久精品| 精品无码久久久久成人漫画| 一区二区三区免费| 日韩精品一区二区av| 一本色道**综合亚洲精品蜜桃冫| 337p粉嫩色噜噜噜大肥臀| 欧美亚洲综合一区| 国产精品视频一二区| 日韩精品中午字幕| 天天色棕合合合合合合合| 亚洲欧美成人精品| 免费黄色在线网站| 欧美激情亚洲一区| 中文字幕av一区二区三区佐山爱| 国产精品久久久久77777| 456成人影院在线观看| 91久久久久久久久久久| 精品欧美午夜寂寞影院| 欧美一区二区在线视频观看| 欧美hd在线| 18黄暴禁片在线观看| 久久久久久亚洲精品杨幂换脸| 羞羞的视频在线| www.99精品| 久久丫精品忘忧草西安产品| 亚洲欧美一区二区久久 | 欧美性猛交xxxx富婆弯腰| 国产精品欧美综合| 日韩你懂的在线播放| 青青青草原在线| 久久网福利资源网站| 川上优av中文字幕一区二区| 国产精品一区av| 久久草在线视频| 在线播放豆国产99亚洲| 亚洲精品在线二区| 亚洲18在线看污www麻豆| www.欧美精品一二区| 色哟哟一一国产精品| 懂色av中文一区二区三区天美| 一级黄色片在线观看| 日韩精品免费综合视频在线播放| 日本免费中文字幕在线| 国产91ⅴ在线精品免费观看| 精品91福利视频| 日韩电影免费观看在| 女人色偷偷aa久久天堂| 亚洲熟妇av一区二区三区| 国产自产v一区二区三区c| 亚洲国产第一区| 亚洲欧洲另类国产综合| 99久久久无码国产精品免费蜜柚| 欧美videossexotv100| 北岛玲日韩精品一区二区三区| 欧美激情国内偷拍| 久久不卡日韩美女| 日本不卡高清视频一区| 精品福利电影| 超碰在线超碰在线| 中文字幕亚洲欧美在线不卡| 日韩不卡在线播放| 亚洲白虎美女被爆操| 黄av在线免费观看| 国产日韩精品在线观看| 精品99久久| 国产一区二区三区精彩视频| 国产精品一区二区久久精品爱涩| 欧美激情视频二区| 日韩欧美一区二区在线| 香蕉av在线播放| 欧美激情精品久久久久久大尺度| 亚洲精品成a人ⅴ香蕉片| 日本一区二区在线视频| 男人的天堂成人在线| 免费看黄色aaaaaa 片| 亚洲成人资源在线| 成人免费一级视频| 欧美日韩成人在线播放| 精品午夜av| 三级在线免费观看| 国产精品一区二区果冻传媒| 成人三级视频在线观看| 欧美午夜精品一区二区三区| 国产51人人成人人人人爽色哟哟| 日本亚洲精品在线观看| 久操成人av| 免费日韩视频在线观看| 久久夜色精品国产噜噜av| 精品国产一区二区三区四| 日韩精品福利网站| 竹内纱里奈兽皇系列在线观看| 久久精品aaaaaa毛片| 国产视频欧美| 美女脱光内衣内裤| 欧美日韩视频在线一区二区| 1pondo在线播放免费| 国产精品视频中文字幕91| 97在线精品| av在线网站免费观看| 亚洲一区二区三区四区在线| 黄色av网址在线| 18性欧美xxxⅹ性满足| 久久不见久久见免费视频7| 国产嫩草在线观看| 亚洲视频免费在线| 好吊色一区二区| 欧美在线日韩在线| 黄色不卡一区| 男插女视频网站| 亚洲网友自拍偷拍| 欧美黄色小说| 国产精品一香蕉国产线看观看| 亚洲精品一区二区在线看| 午夜性福利视频| 五月天精品一区二区三区| 国产三级视频在线看| 国产日韩换脸av一区在线观看| 欧美日本久久| 鲁大师私人影院在线观看| 在线免费亚洲电影| 91国内在线| 欧美lavv| 国内精品久久久久影院色| 久久久一二三区| 国产亚洲视频在线| 亚洲电影一区| 十八禁视频网站在线观看| 亚洲美女视频在线| 三级视频在线| 成人免费视频在线观看超级碰| 在线播放日韩| 天堂网av2018| 亚洲国产美女久久久久| 成人国产激情在线| 妺妺窝人体色777777| 欧美国产日韩在线观看| 亚洲精品18在线观看| 日韩av成人在线| 中文不卡在线| 久久久国产一级片| 亚洲第一男人av| 99精品美女视频在线观看热舞| 北条麻妃在线视频观看| 亚洲人吸女人奶水| 福利在线播放|