“尼瑪哥,你今天有空么?”
“今天周日呀,怎么會沒空,你這是要約么?麻辣燙涼皮我都吃,在哪兒,我一會兒就到。”
“約你妹呀,我昨天都加一天班了,東西到現在還沒搞完,你給我快點過來呀,我需要你!”
“別急噢,有哥在,這都不叫事兒。”
二十分鍾后...
“小美,什么問題搞不定?”
“尼瑪哥,MVC這個破東西,一點都不好用,以前我做畢業設計用WebForm里面拖服務器控件可方便了。我這兩天在做一個訂單管理,以前用服務器控件,拖完控件以后這樣寫”
private void save() { string orderNo=txt_OrderNo.Text.Trim(); string orderDate=txt_OrderDate.text.trim(); ... ... SqlHelper.Execute("Insert Into Order... ... ... }
“表頭數據提交這樣寫,訂單明細更好弄了,直接拖個GridView出來數據就可以綁定上去了。你看界面我昨天上午就弄好了,數據按你以前說的,組成Json走Ajax提交到后台這一個個拼,到后台再一個個解,再插數據庫要把我搞瘋了,表頭的還好,明細的會把我搞瘋掉!!你看這是我仿其它界面拖出來的界面”
“不錯,不錯界面現在畫得很不錯了,JQgrid用得也很像那么回事。你提交數據的代碼是怎么寫的?”
“諾,你看”
//保存事件 function SubmitOrderForm() { function (r) { if (r) { Loading(true, "正在提交數據..."); window.setTimeout(function () { var postData = “{["OrderNo:”+$(txt_OrderNo).val()+ ... ... //明細表格里的都不知道怎么寫了!!!!! AjaxJson("/ExampleModule/Order/SubmitOrderForm?KeyValue=" + KeyValue, postData, function (data) { tipDialog(data.Message, 3, data.Code); ThisCloseTab(); }); }, 200); } }); }
“看起來倒是像這么回事的,訂單明細表格里的一樣把值取出來拼Json呀怎么不會了?”
“表格里面我也不知道用戶填了多少行數據,知道的話我還可以寫個for循環。”
“小美,我看你事業線縱深也不怎么樣呀,你這腦子怎么還是這么笨呢!你看表格一共有多少行你這樣循環去取,不就好了嗎?”
“可是你沒看到這上面不是有空行么!”
“都說女人胸大無腦,我覺得你現在肯定還是沒發育,以后肯定比柳岩身材好。有空行,遇到空行你跳出循環不就好了!你這代碼這樣寫也太亂了,就算寫完了也容易出異常,我給你個取頁面數據的函數,你自己拿去套着用”
/* 自動獲取頁面控件值 */ function GetWebControls(element) { var reVal = ""; $(element).find('input,select,textarea').each(function (r) { var id = $(this).attr('id'); var value = $(this).val(); var type = $(this).attr('type'); switch (type) { case "checkbox": if ($(this).attr("checked")) { reVal += '"' + id + '"' + ':' + '"1",' } else { reVal += '"' + id + '"' + ':' + '"0",' } break; default: if (value == "") { value = " "; } reVal += '"' + id + '"' + ':' + '"' + $.trim(value) + '",' break; } }); reVal = reVal.substr(0, reVal.length - 1); return jQuery.parseJSON('{' + reVal + '}'); }
“尼瑪哥,真看不出來呀,別看你人不怎么樣,寫出來的代碼還真靈活,就這幾句話,我剛套到代碼里Alert一下,把界面上的控件和值全拼成了Json,我只要在后台把控件名改成字段名,就可以直接調后台方法把Json轉成實體,直接插數據庫啦。”
“小美,你真是得了柳岩的病沒有柳岩的命呀!你怎么這么蠢呢,前台代碼也是你寫的,你界面上的控件名跟字段名一致,不就不用轉了么,Json提交后台,轉實體插數據庫一氣呵成,直接可以封閉成公用方法了。”
“有些代碼我是用代碼生成器生成的呀!”
“你就不會改下代碼生成器么!把生成前台界面上的txt_、select_。。。這些該死的東西拿掉不就好了,不管加控件減控件套這代碼的話,一個代碼都不用改呀!”
“恩,也是噢,我先寫寫看。”
一小時后... ...
“尼瑪哥,好了,那代碼真好用我直接封閉到函數庫去了,提交后台就一句話。”
“就這么點東西,你還折騰了一小時,你也是個人才。”
“切,我把明細提交,表單提交一起寫完了,以前是我JS用得不熟,其實JS也跟C#一樣,也可以遍歷也一樣可以對控件賦值取值,一樣有對象的概念。我剛剛把明細轉成Json后,后台就轉List了,批量插入,帶事務也方便。頁面編輯其實就是取值相反的操作,那就是從后台取到值,實體轉成Json,再把你方法這么一改,就好了”
/* 自動給控件賦值 */ function SetWebControls(data) { for (var key in data) { var id = $('#' + key); var value = $.trim(data[key]).replace(" ", ""); var type = id.attr('type'); switch (type) { case "checkbox": if (value == 1) { id.attr("checked", 'checked'); } else { id.removeAttr("checked"); } $('input').customInput(); break; default: id.val(value); break; } } }
“把這兩個函數封裝一下,前台頁面要加載數據或者保存數據,一句話就能搞定呀,尼瑪哥!這次代碼是我寫好的,要不要給網友們發一份呀”
“別,你那代碼是直接用到項目里的,項目里面有些公司Logo鏈接什么的,容易讓別人誤會是搞推廣。”
“恩,好的,晚點我有時間的時候,把公司、項目信息全去掉,再來上傳源碼。”