我和小美的擼碼日記(3)之一句話搞定MVC表單頁數據綁定與提交


“尼瑪哥,你今天有空么?”

“今天周日呀,怎么會沒空,你這是要約么?麻辣燙涼皮我都吃,在哪兒,我一會兒就到。”

“約你妹呀,我昨天都加一天班了,東西到現在還沒搞完,你給我快點過來呀,我需要你!”

“別急噢,有哥在,這都不叫事兒。”

二十分鍾后...

“小美,什么問題搞不定?”

“尼瑪哥,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鏈接什么的,容易讓別人誤會是搞推廣。”

“恩,好的,晚點我有時間的時候,把公司、項目信息全去掉,再來上傳源碼。”

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM