程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> MVC+jQuery開發B/S系統:表單提交(2)

MVC+jQuery開發B/S系統:表單提交(2)

編輯:關於C語言

一:我們定義一個JSonMessage類

  1. public class JSonMessage  
  2. {  
  3. public int result { get; set; } //0錯誤 1正確 2提示 3警告  
  4. public string title { get; set; }//Lightbox窗口的標題  
  5. public string content { get; set; }//message的具體內容  
  6. public string redirect { get; set; }//彈出後自動跳轉的到哪裡?  
  7. public object callBackData { get; set; }//客戶端需要的數據 比如 一個新增的id或整個model  
  8. }  
 

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

二:我們寫一個AJaxMsg來實現lightbox,這是我自己寫的Lightbox,比較簡陋,如果不喜歡,也可以用一些知名的插件。

代碼:

  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來做,包括div的定位都可以在CSS裡寫JS代碼來實現。

不知道有沒有人能理解我這裡的callback,我說一下他的用到的情況。 實際應用中我還有一個AJaxWin來實現彈窗,彈窗裡的表單提交後一般需要關閉彈窗,然後更新一些數據(比如刷新列表)。這時就需要 submit後的callback動作。另外就是我目前還有使用到redirect這個屬性。呵呵,我之前的系統需要大量的跳轉處理,這些跳轉也是無刷新的,有一個數組來記錄訪問的地址。可以實現後退和前進。

三:好了,Lightbox已經實現了,也能show出各種類型的信息了。
下面還剩下表單驗證。 其實表單驗證大有文章可做。我這也不能一一做到。目前只做了些簡單的驗證。以後會實現比較復雜的錯誤提示效果。其實這都是體力活,上面沒要求我也懶的弄。

驗證我采用的是給control一些自定義屬性,然後再判斷其值是否合法。

代碼:

  1. //輸入驗證   
  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("此項必須填寫!");   
  13. else $(this).inputRight();   
  14. });   
  15. }   
  16. //②正則注冊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. //③最小長度   
  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("長度不能小於" + minLength); }   
  33. });   
  34. //④其他   
  35. });   
  36. };   
  37. //提交驗證   
  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("此項必須填寫!");   
  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. }  
 

每一種方法,我們都應該從性能和發功效率上來考慮,要做到兩者兼得是很不容易的。通過本文作者的分析,希望會對你有所幫助。

【責任編輯:QiHappy TEL:(010)68476606】
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved