成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MVC+jQuery開(kāi)發(fā)B/S系統(tǒng):表單提交

開(kāi)發(fā) 后端
B/S系統(tǒng)是基于B/S結(jié)構(gòu)的系統(tǒng),也就是基于瀏覽器/服務(wù)器的系統(tǒng)。本文主要介紹MVC+jQuery來(lái)處理表單的提交,讓我們一起來(lái)看。

Jquery是一個(gè)優(yōu)秀的Javascrīpt框架。MVC是一個(gè)設(shè)計(jì)模式,它強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開(kāi)。今天我們就談如何用JQuery+MVC來(lái)處理表單的提交。 

想達(dá)到的效果:

1、提交前的表單驗(yàn)證 

2、表單驗(yàn)證 

3、提交后的反饋信息 

ok,先說(shuō)一下工作的原理。

前臺(tái)<form action='xxx.aspx' method='post'></form>,action指定了接受表單的處理頁(yè)面。method這里我們只說(shuō)post。 如果用ajax提交表單,自然xxx.aspx便是請(qǐng)求的url。ajax請(qǐng)求后的callback便是響應(yīng)表單的提交結(jié)果(錯(cuò)誤、成功),我們提交的反饋信息用一個(gè) 浮層(lightbox)來(lái)表示。 不至于用 alert(""); 這樣鐺鐺鐺很?chē)濉?/p>

我們引入一個(gè)Jquery的插件http://www.malsup.com/jquery/form/#api 這是一個(gè)略有名氣的插件,方便易用。關(guān)于其用法,大家可以搜索下。

那么我們需要做的就是: 

1、jquery.form.js的使用 

2、lightbox的實(shí)現(xiàn) 

3、如何驗(yàn)證

代碼:

  1. $.fn.submitForm = function(args)   
  2. {          
  3. var url, id, callback, before;   
  4. id = this.attr("id");          
  5. if (typeof (args) == "string")   
  6. {              
  7. url = args;              
  8. before = undefined;              
  9. callback = undefined;          
  10. }          
  11. else   
  12. {              
  13. args = args || new Object();              
  14. url = args.url || this.attr("action");              
  15. if (typeof (args) == "function")   
  16. {                  
  17. callback = args;              
  18. }              
  19. else   
  20. {                  
  21. before = args.before;                  
  22. callback = args.callback;              
  23. }          
  24. }          
  25. //輸入驗(yàn)證          
  26. this.inputValidate();          
  27. //form沒(méi)有url 則是偽提交          
  28. if (url == undefined || url == "")   
  29. {              
  30. $("#" + id).submit(function() {                  
  31. if ($("#" + id).submitValidate()==false)                      
  32. return false;                  
  33. //驗(yàn)證成功就執(zhí)行callback                  
  34. callback();              
  35. });          
  36. }          
  37. else   
  38. {              
  39. this.ajaxForm({                  
  40. url: url,                  
  41. beforeSubmit: function(a, f, o)   
  42. {                      
  43. //提交驗(yàn)證                      
  44. if ($("#" + id).submitValidate() == false)                          
  45. return false;                      
  46. if (before != undefined && before() == false) {                          
  47. return false;                      
  48. }                      
  49. o.dataType = "json";                  
  50. },                  
  51. success: function(data) {                      
  52. if (data == "" || data == null)   
  53. {                          
  54. return false;                      
  55. }                      
  56. $("#myMsg").showMsg(data, callback);                    
  57. return false;                  
  58. }              
  59. });          
  60. }          
  61. return this;      
  62. }; 

上面的方法很簡(jiǎn)單,就是form插件的使用,還有幾個(gè)我們需要實(shí)現(xiàn)的方法。(inputValidate,submitValiedate,ajaxMsg)
既然是ajax提交,我們則需要給客戶端一個(gè)反饋信息,然后用Lightbox呈現(xiàn)。

#p#

一:我們定義一個(gè)JsonMessage類

  1. public class JsonMessage  
  2. {  
  3. public int result { getset; } //0錯(cuò)誤 1正確 2提示 3警告  
  4. public string title { getset; }//Lightbox窗口的標(biāo)題  
  5. public string content { getset; }//message的具體內(nèi)容  
  6. public string redirect { getset; }//彈出后自動(dòng)跳轉(zhuǎn)的到哪里?  
  7. public object callBackData { getset; }//客戶端需要的數(shù)據(jù) 比如 一個(gè)新增的id或整個(gè)model  
  8. }  
 

MVC返回Json(jsonmsg1),客戶端的callback便可以得到這個(gè)對(duì)象的json格式。
(注意:如果是附件的表單提交,則不能識(shí)別JsonResult格式。具體我還沒(méi)有研究怎么回事,這種情況只能response一個(gè)json字符串,可以用System.Web.Script.Serialization.JavaScriptSerializer來(lái)序列化對(duì)象,也很方便。)

二:我們寫(xiě)一個(gè)ajaxMsg來(lái)實(shí)現(xiàn)lightbox,這是我自己寫(xiě)的Lightbox,比較簡(jiǎn)陋,如果不喜歡,也可以用一些知名的插件。

代碼:

  1. (function($)   
  2. {   
  3. $.fn.showMsg = function(model, callback, fail)   
  4. {   
  5. var me = this;   
  6. if (me.length == 0)   
  7. {   
  8. $("body").append("<div id='" + me.selector.replace("#""") + "'></div>");   
  9. $(me.selector).showMsg(model, callback);   
  10. return;   
  11. }   
  12. if (model == undefined)   
  13. return;   
  14. model.content = model.result == 1 && model.content == undefined ? "操作成功!" : model.content;   
  15. me.html(model.content);   
  16. me.removeClass().addClass("message_" + model.result).show(100);   
  17. if (model.result1 == 1 && fail != undefined)   
  18. {   
  19. fail(model);   
  20. }   
  21. if (model.result == 1 && callback != undefined)   
  22. {   
  23. callback(model);   
  24. }   
  25. setTimeout(function()   
  26. {   
  27. if (me.css("display") != "none")   
  28. {   
  29. me.hide(100);   
  30. }   
  31. }, 3000);   
  32. return me;   
  33. }  
  34. })(jQuery);  

Ajax消息的樣式完全可以用CSS來(lái)做,包括div的定位都可以在css里寫(xiě)js代碼來(lái)實(shí)現(xiàn)。

不知道有沒(méi)有人能理解我這里的callback,我說(shuō)一下他的用到的情況。 實(shí)際應(yīng)用中我還有一個(gè)ajaxWin來(lái)實(shí)現(xiàn)彈窗,彈窗里的表單提交后一般需要關(guān)閉彈窗,然后更新一些數(shù)據(jù)(比如刷新列表)。這時(shí)就需要 submit后的callback動(dòng)作。另外就是我目前還有使用到redirect這個(gè)屬性。呵呵,我之前的系統(tǒng)需要大量的跳轉(zhuǎn)處理,這些跳轉(zhuǎn)也是無(wú)刷新的,有一個(gè)數(shù)組來(lái)記錄訪問(wèn)的地址。可以實(shí)現(xiàn)后退和前進(jìn)。

三:好了,Lightbox已經(jīng)實(shí)現(xiàn)了,也能show出各種類型的信息了。
下面還剩下表單驗(yàn)證。 其實(shí)表單驗(yàn)證大有文章可做。我這也不能一一做到。目前只做了些簡(jiǎn)單的驗(yàn)證。以后會(huì)實(shí)現(xiàn)比較復(fù)雜的錯(cuò)誤提示效果。其實(shí)這都是體力活,上面沒(méi)要求我也懶的弄。

驗(yàn)證我采用的是給control一些自定義屬性,然后再判斷其值是否合法。

代碼:

  1. //輸入驗(yàn)證   
  2. $.fn.inputValidate = function() { $("input,select,textarea"this).each(function() {   
  3. var me = $(this);   
  4. var isnull = me.attr("isnull") || "1";   
  5. var dvalue = me.attr("dvalue");   
  6. me.focus(function() {   
  7. if (this.value == "") $(this).inputRemove();   
  8. });   
  9. me.keyup(function() { if (this.value == "") $(this).inputRemove(); });   
  10. //①非空檢查 if (isnull == "0") {   
  11. me.blur(function() {   
  12. if ($(this).val() == "" || $(this).val() == dvalue) $(this).inputError("此項(xiàng)必須填寫(xiě)!");   
  13. else $(this).inputRight();   
  14. });   
  15. }   
  16. //②正則注冊(cè)onchange事件   
  17. var regexValue = me.attr("regex");   
  18. if (regexValue != undefined) {   
  19. var thisValue = me.val();   
  20. me.blur(function() {   
  21. var re = new RegExp(regexValue, "ig");   
  22. if (this.value != "" && !re.test(this.value)) { me.inputError("格式不正確!");   
  23. return result = false;   
  24. else me.inputRight();   
  25. }); }   
  26. //③最小長(zhǎng)度   
  27. var minLength = me.attr("minlength") || 0;   
  28. if (minLength != undefined) minLength = parseInt(minLength);   
  29. me.blur(function() {   
  30. if (me.val() != null)   
  31. if (me.val().length < minLength) {   
  32. me.inputError("長(zhǎng)度不能小于" + minLength); }   
  33. });   
  34. //④其他   
  35. });   
  36. };   
  37. //提交驗(yàn)證   
  38. $.fn.submitValidate = function() {   
  39. var result = true; $("input:visible,select:visible,textarea:visible"this).each(function() {   
  40. var me = $(this);   
  41. var thisValue = "";   
  42. if (me.attr("type") == "radio" || me.attr("type") == "checkbox") {   
  43. thisValue = $("input[name='" + this.name + "']:checked").val();   
  44. }   
  45. else thisValue = me.val();   
  46. //判斷是否違法   
  47. //① 是否必填 且不能為空或缺省值   
  48. if (me.attr("isnull") == "0") {   
  49. if (thisValue == "" || (thisValue != "" && thisValue == me.attr("dvalue"))) {   
  50. me.inputError("此項(xiàng)必須填寫(xiě)!");   
  51. return result = false;   
  52. }   
  53. else me.inputRight();   
  54. }   
  55. //② 是否符合格式 屬性為 regex 正則   
  56. if (thisValue != "") {   
  57. var reValue = $(this).attr("regex");   
  58. if (reValue != undefined) {   
  59. re = new RegExp(reValue, "ig");   
  60. if (!re.test(thisValue)) {   
  61. me.inputError("格式不正確!");   
  62. return result = false;   
  63. }   
  64. else me.inputRight();   
  65. } } });   
  66. return result;   
  67. };   
  68. $.fn.inputError = function(msg) {   
  69. this.inputRemove();   
  70. //this.focus();   
  71. $("span"this.parent()).hide();   
  72. this.parent().addClass("focus").append("<span class='error'>" + (msg || '') + "</span>");   
  73. }   
  74. $.fn.inputRight = function(msg) {   
  75. this.inputRemove();   
  76. //this.focus();   
  77. $("span"this.parent()).hide();   
  78. this.parent().addClass("focus").append("<span class='right'>" + (msg || '') + "</span>");   
  79. } $.fn.inputRemove = function() {   
  80. this.removeClass("focus");   
  81. $(".right,.error"this.parent()).remove();   
  82. $("span"this.parent()).show();   
  83. }  
 

每一種方法,我們都應(yīng)該從性能和發(fā)功效率上來(lái)考慮,要做到兩者兼得是很不容易的。通過(guò)本文作者的分析,希望會(huì)對(duì)你有所幫助。

責(zé)任編輯:于鐵 來(lái)源: 博客園
相關(guān)推薦

2009-09-14 18:44:06

MVC+jQuery

2012-06-05 10:15:43

jQuery

2009-07-29 16:40:50

Ajax提交asp.n

2009-06-25 14:32:00

Java BS開(kāi)發(fā)模式

2012-12-24 10:00:07

ASP.NETjQueryAjax

2010-11-23 16:56:04

mysql表單

2010-07-29 16:38:14

Flex表單

2023-04-11 07:50:27

軟件架構(gòu)設(shè)計(jì)

2010-03-04 11:36:02

Python提交表單

2013-11-13 14:39:53

表單提交開(kāi)發(fā)

2013-11-13 11:01:14

表單表單重復(fù)提交表單策略

2011-06-16 10:21:52

jQuery

2009-12-01 18:11:03

PHP表單重復(fù)提交

2012-03-27 14:34:07

Visual Stud微軟MVC

2012-03-08 11:23:09

jQuery Mobi

2009-05-18 10:11:06

MVCXML動(dòng)態(tài)表單

2010-01-22 14:59:40

VB.NET表單自動(dòng)提

2009-03-31 13:12:05

ASP.NETMVC表單驗(yàn)證

2012-03-29 09:27:49

WEBjQuery

2009-07-29 09:17:12

jQuery刪除
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 成人免费在线视频 | 亚洲精品九九 | 日韩成人在线看 | 欧美偷偷操 | 波霸ol一区二区 | 国产乱码精品一品二品 | 国内精品久久影院 | 亚洲天堂成人在线视频 | 日韩成人高清在线 | 国产黄色在线观看 | 91精品国产综合久久久久久丝袜 | 亚洲女人天堂成人av在线 | 91在线色视频 | 在线观看成人免费视频 | 日韩欧美亚洲一区 | 激情网五月天 | www.国产精品 | 欧美成人精品 | 中文字幕一页二页 | 国产午夜精品久久久 | 欧美一二三区 | 日韩免费av | 亚洲视频在线观看免费 | 精品国产99 | 天天操狠狠操 | 中文在线а√在线8 | 免费久久视频 | 欧美一区二区三区在线观看 | 久久久性色精品国产免费观看 | 国产日韩一区二区 | 国产精品久久久久无码av | 99久久日韩精品免费热麻豆美女 | 日韩国产高清在线观看 | 国产激情一区二区三区 | 二区av | 超碰免费观看 | 日本免费网 | 一级爱爱片 | 国产一区久久久 | 国产精品久久在线 | 久久综合一区 |