精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产污污视频在线观看| 福利片一区二区三区| 天堂成人在线视频| 视频精品一区二区| 色老头一区二区三区| 国产亚洲色婷婷久久| 大桥未久在线视频| 国产亚洲成aⅴ人片在线观看| 国产精品国产福利国产秒拍| 久热这里有精品| 特黄特色欧美大片| 337p亚洲精品色噜噜噜| 国产极品尤物在线| 日本韩国在线视频爽| 成人深夜视频在线观看| 国产精品久久久久999| 特级片在线观看| 免费看成人吃奶视频在线| 91精品麻豆日日躁夜夜躁| 日韩一级片一区二区| 国产视频精品久久| gogogo免费视频观看亚洲一| 91精品在线观| 91丝袜一区二区三区| 国内精品美女在线观看| 在线精品国产欧美| 午夜理伦三级做爰电影| 91精品国产自产在线丝袜啪| 欧美久久一区二区| 国产xxxxx在线观看| 日韩电影免费观看| 最新成人av在线| 蜜桃av噜噜一区二区三区| 99热这里只有精| 蜜桃av噜噜一区| 欧美亚洲视频在线看网址| 久久久.www| 四季av一区二区凹凸精品| 国产亚洲精品美女| 亚洲av无码成人精品国产| 51亚洲精品| 日韩一区二区三区视频在线观看| 天天干天天操天天做| 日韩电影免费观| 福利微拍一区二区| 欧美一级视频免费看| 国模私拍视频在线播放| 亚洲摸摸操操av| 色哺乳xxxxhd奶水米仓惠香| 蜜桃视频网站在线观看| 中文无字幕一区二区三区| 日本在线免费观看一区| 日韩有码电影| 91论坛在线播放| 精品在线一区| 精品视频一二区| 久久久久久免费毛片精品| 美女主播视频一区| 国产三级在线看| 国产精品视频一二| 亚洲永久激情精品| 国产黄网站在线观看| 亚洲欧美日韩国产一区二区三区| 7777在线视频| av在线理伦电影| 五月天激情小说综合| 欧美日韩成人免费视频| 久久九九免费视频| 欧美成人三级在线观看| 黄色在线一区| 日本不卡免费高清视频| 日本丰满少妇做爰爽爽| 久久国产精品99精品国产| 亚洲伊人久久综合| 精品国精品国产自在久不卡| 国产成人精品三级麻豆| 亚洲永久免费观看| 国产xxxx孕妇| 国产高清在线观看免费不卡| 成人在线资源网址| 欧美 中文字幕| 久久众筹精品私拍模特| 欧美日韩另类丝袜其他| 黄色小视频在线免费观看| 国产日韩成人精品| 亚洲欧洲xxxx| 国产在线高清精品| 国产成人麻豆精品午夜在线 | 国产一区二区美女| 亚洲综合国产精品| www男人的天堂| 成人久久18免费网站麻豆| 精品国产乱码久久久久久丨区2区| 天天综合在线视频| 久久久精品国产99久久精品芒果| 日韩一本精品| 国产黄网站在线观看| 亚洲国产视频a| 久久久久久久久久久久久国产精品| 欧洲精品一区二区三区| 在线日韩av片| 欧美一级片在线免费观看| 欧美五码在线| 最近2019中文字幕mv免费看| 国产精品久久久精品四季影院| 欧美日韩网站| 国产999精品视频| 国产精品久久久久久在线| 国产成人av资源| 久久综合中文色婷婷| 国产一二三区在线| 亚洲欧洲国产日韩| 极品美女扒开粉嫩小泬| 日本肉肉一区| 精品久久久久久最新网址| 日本黄色网址大全| 天天做天天爱综合| 97免费视频在线播放| 亚洲无码精品在线播放| 亚洲综合五月| 精品一区二区免费看| 91精品国产91久久久久青草| 日韩av资源| 亚洲欧美国产高清| 中文字幕无码不卡免费视频| 国产精品一区二区三区av| 亚洲精品在线视频| 久久久久成人精品无码| 日本在线不卡视频| 91九色蝌蚪成人| 日本中文字幕在线看| 欧美日韩在线视频一区| 亚洲热在线视频| 日韩一区二区在线免费| 91成人精品网站| 性生活三级视频| 国产精品久久久久久久久晋中| 免费看一级大黄情大片| 国产精品久一| 北条麻妃在线一区二区| 手机在线看片1024| 不卡影院免费观看| 超碰在线免费观看97| 亚洲精品555| 日韩精品极品在线观看播放免费视频| 超碰手机在线观看| 美国av一区二区| 欧美污视频久久久| 涩涩av在线| 精品国产91乱码一区二区三区| 欧美成人黄色网| 国产一区二区三区在线观看免费视频| 色综合电影网| 电影亚洲精品噜噜在线观看| 日韩精品免费在线| 91香蕉在线视频| 不卡的看片网站| 欧美又粗又长又爽做受| 成人精品视频在线观看| 美女扒开尿口让男人操亚洲视频网站| 中文在线观看免费网站| 99久久婷婷国产综合精品电影| 国产视频在线观看网站| 国产成人免费观看网站| 高潮久久久久久久久久久久久久| 精品国产一区二区三区四区在线观看 | xxxxwww一片| 亚洲精品国产首次亮相| 91日韩在线播放| 国产在线激情| 欧美一级在线免费| 成人免费视频网站入口::| 国产一区在线不卡| 日韩久久久久久久久久久久| 日韩中文字幕无砖| 欧美精品xxx| 免费观看黄色一级视频| 欧美日韩国内自拍| 亚洲激情视频小说| 久久国产精品一区二区| 日本黄色a视频| 欧美.com| 91国产美女视频| 青梅竹马是消防员在线| 色综合久久久网| 黄色一级片一级片| 成人综合在线网站| jizzjizz国产精品喷水| 国产精品手机在线播放| 国产精品久久一| 超碰porn在线| 亚洲精品国产美女| 中文字幕 日韩有码| 亚洲精品免费电影| 人妻无码一区二区三区| 日韩电影在线看| 中文字幕久久一区| 成人看片爽爽爽| 国产精品大陆在线观看| 国产素人视频在线观看| 日韩一级视频免费观看在线| 探花视频在线观看| 国产精品二区一区二区aⅴ污介绍| 男人女人拔萝卜视频| 宅男噜噜噜66国产日韩在线观看| 视频一区二区三区免费观看| 国产精品一区二区美女视频免费看 | 国产精品老女人视频| 成人在线二区| 亚洲精品久久久久久久久久久久久 | 久久福利影院| av成人观看| 国产一区影院| 91精品国产91久久久久福利| 日韩在线免费电影| 亚洲激情视频网| 91女人18毛片水多国产| 欧美日韩激情视频8区| 国产真实乱在线更新| 99久久伊人精品| 在线观看视频在线观看| 日韩电影一区二区三区四区| 免费人成自慰网站| 久久久久电影| 日本午夜精品一区二区| 中文久久电影小说| 91香蕉国产在线观看| 日本电影欧美片| 久久久视频精品| 大片免费在线观看| 亚洲天堂免费在线| 天天干天天舔天天射| 欧美一区二区三区四区久久| 国产免费叼嘿网站免费| 日本精品一级二级| 日韩高清精品免费观看| 亚洲欧美视频在线观看视频| 久久久久久久国产精品视频| 国产又粗又猛又爽| 亚洲精品久久嫩草网站秘色| 性欧美videos| 中文字幕一区二区三区在线播放| 性欧美精品中出| 99热国产精品| 扒开伸进免费视频| 国产成人久久精品77777最新版本| 亚洲黄色a v| 免费成人小视频| 熟妇人妻va精品中文字幕| 99在线精品免费视频九九视| 日本a在线天堂| 911精品美国片911久久久| 亚洲第一综合| 神马影视一区二区| 亚洲激情电影在线| 残酷重口调教一区二区| 日韩av高清| 欧美日韩中文字幕一区二区三区| 欧美精品一区二区三区在线看午夜 | 五月天视频在线观看| 美国十次了思思久久精品导航 | 欧美午夜不卡视频| 黄色在线免费观看| 欧美日韩另类在线| 国产欧美一区二区三区在线看蜜臂| 亚洲资源在线观看| 精品无码久久久久| 亚洲国产精品久久久男人的天堂| 精品无码久久久久久久| 性久久久久久久| 91丝袜一区二区三区| 欧美性色欧美a在线播放| 伊人久久国产精品| 欧美精品粉嫩高潮一区二区| 97成人在线观看| 日韩欧美色综合网站| 亚洲av综合色区无码一二三区| 欧美www视频| 亚洲欧美一区二区三| 亚洲女成人图区| 第一页在线观看| 中文字幕精品在线视频| 牛牛精品在线| 91精品国产99久久久久久| 欧美大片免费高清观看| 亚洲精品国产动漫| 蜜桃av久久久亚洲精品| 成人网18免费网站| 99re6这里有精品热视频| 精品99视频| 日本在线视频www| 欧美aa在线视频| 欧美性猛交xxx乱久交| 精品在线播放午夜| 国产精品一区二区无码对白| 2023国产一二三区日本精品2022| 精品欧美一区二区久久久| 中文字幕在线视频一区| 欧美被狂躁喷白浆精品| 欧美性生交xxxxxdddd| 91麻豆视频在线观看| 亚洲精品一区二区三区蜜桃下载 | 男女啪啪的视频| 极品中文字幕一区| 欧美日韩一区二区在线免费观看 | 一区二区三区在线高清| 圆产精品久久久久久久久久久| 欧美性生交片4| 亚洲av无码片一区二区三区| 亚洲人成网站色ww在线| 成人在线观看亚洲| 国模私拍视频一区| 国产欧美在线观看免费| 国产一区二区免费电影| 水蜜桃久久夜色精品一区| 97视频在线免费| 麻豆成人久久精品二区三区小说| 天堂久久久久久| 亚洲美腿欧美偷拍| 无码人妻丰满熟妇精品| 欧美一级黄色片| 福利视频在线导航| 欧美激情第一页xxx| 中文成人在线| 日产精品一线二线三线芒果| 欧美三级特黄| 成人性生交免费看| 91美女视频网站| 国产精品1区2区3区4区| 岛国av一区二区| 精品国产18久久久久久| 中日韩美女免费视频网站在线观看| 日本色护士高潮视频在线观看| 国产精品久久久久久久一区探花| 东京久久高清| 一区二区三区免费看| 免费国产亚洲视频| 日韩精品电影一区二区| 午夜精品一区在线观看| 精品国产一级片| 久久久国产精彩视频美女艺术照福利| 中文字幕色婷婷在线视频| 国产午夜精品一区| 国产真实久久| 中文字幕一区二区三区人妻在线视频 | 狠狠躁夜夜躁av无码中文幕| 欧美高清激情视频| 国产精品亚洲一区二区在线观看| 视频一区视频二区视频三区视频四区国产 | gogo在线观看| 成人网在线视频| 日韩精品欧美| www欧美激情| 久久婷婷综合激情| 黄色av网站免费| 亚洲一区999| 欧洲亚洲两性| 欧美日韩国产高清视频| 久久电影一区| 久久丫精品忘忧草西安产品| 日韩欧美国产一区二区| 三级理论午夜在线观看| 日本电影亚洲天堂| 久久超碰99| 国产在线观看福利| 国产三级三级三级精品8ⅰ区| 日韩美一区二区| 亚洲天堂男人天堂女人天堂| 91国内外精品自在线播放| 日韩久久精品一区二区三区| 日韩中文字幕区一区有砖一区| 中文字幕第69页| 3751色影院一区二区三区| 一区二区三区伦理| 国产高清在线精品一区二区三区| 亚洲天堂激情| www.自拍偷拍| 欧美在线观看视频一区二区| 精品av中文字幕在线毛片| 国产精品扒开腿做爽爽爽男男| 成人在线免费小视频| 午夜免费福利在线| 一区二区三区日韩欧美| 人人妻人人玩人人澡人人爽| 8x海外华人永久免费日韩内陆视频 | 亚洲午夜一区| 中国黄色a级片| 这里只有精品电影| 免费污视频在线| 快播日韩欧美| 久久成人羞羞网站| 麻豆疯狂做受xxxx高潮视频| 精品国产青草久久久久福利| 手机av在线| 一区二区不卡在线| 国产99久久久久| 亚洲 欧美 日韩 在线| 欧美成人精品影院| 亚洲第一福利社区| www.夜夜爽|