關於asp.net MVC 中的TryUpdateModel方法


有比較才會有收貨,有需求才會發現更多。

在傳統的WebFormk開發工作中,我們常常會存在如下的代碼塊

        //保存
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            try
            {
                BLL.MoneyBll cun = new BLL.MoneyBll();
                Model.Money m1 = new Model.Money();
                m1.Commany = int.Parse(this.Commany.Text);
                m1.CountryId = int.Parse(this.cou.Value);
                m1.CountryIds = "";
                m1.MaxX = float.Parse(this.MaxX.Text);
                m1.MinX = float.Parse(this.MinX.Text);
                if (!string.IsNullOrEmpty(this.XPrice.Text)) 
                {
                    m1.XPrice = float.Parse(this.XPrice.Text);
                }
                if (!string.IsNullOrEmpty(this.YPrice.Text))
                {
                    m1.YPrice = float.Parse(this.YPrice.Text);
                }
                m1.Type = int.Parse(this.Type.Text);
                int res = cun.Add(m1);
                //JscriptMsg("添加費用信息成功!", "moneyList.aspx", "Success", "parent.loadMenuTree");
            }
            catch 
            {
                //JscriptMsg("添加費用信息失敗,請檢查錄入合法性!", "moneyList.aspx", "Error", "parent.loadMenuTree");
            }
        }

即:在點擊保存按鈕的時候將表單Form內個表單元素的值一一獲取,轉換為相對應的目標類型,賦值到一個新的實體類對象屬性上,用於實現相關的功能點開發。

以上的代碼塊在我們日常的開發工作中頻頻出現,相似程度可謂高之又高。

在mvc中為該情況的通用帶來了優良的解決方案,——TryUpdateModel  用法如下

            FunModel model = new FunModel();
            TryUpdateModel(model, formCollection.AllKeys);

其中

formCollection.AllKeys是可選參數,如果未傳入該參數,TryUpdateModel會獲取當前請求上下文中所有的key值,包括Request.QueryString(eg:a.aspx?a=1&b=2)中的key值,以及Request.Form中所有的key值,還包括整個請求上下文中所有的數據包鍵值對中的健,
然后循環這些所有的健,通過反射機制獲取實體對象model對應key的屬性,判斷如果存在名稱為key的屬性,那么獲取數據包鍵值對中改key對應的value值,通過的反射的形式賦值到實體類的對應屬性中去,完成數據包內數據到實體對象的裝配,在此過程之中同樣存在數據包中的value值到實體對象屬性Type的類型轉換,省略了繁瑣的int.Parse(this.Commany.Text)判斷,轉型操作,大大簡化了功能開發中類似代碼的出現。formCollection.AllKeys————————Request.Form中所有的key值。


 


免責聲明!

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



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