Model Binding入門、簡介、初試身手 #3 -- Web Form、Repository 與 .TryUpdateModel()方法

我們常在 Model Binding的範例裡面,看見一個特殊的 .TryUpdatModel()方法 (不需要加入 MVC命名空間就能使用!!)
您也常在很多MVC的書本與範例中,看見這個關鍵字 Repository

源自「Pro ASP.NET 4.5 in C#」書本裡面的範例,或許可以幫助您 "體會"

上一篇文章:

Model Binding入門、簡介、初試身手 #1 -- 搭配ASP.NET Web Form (不使用EF)

     https://dotblogs.com.tw/mis2000lab/2014/09/11/model_binding_1_20140911

Model Binding入門、簡介、初試身手 #2 -- Web Form分頁與 IQueryable (不使用EF)

     https://dotblogs.com.tw/mis2000lab/2015/01/09/modelbinding_gridview_page_selectmethod

 

我們常在 Model Binding的範例裡面,看見一個特殊的 .TryUpdatModel()方法

各位可以在其他前輩的大作中,瞭解一下裡面的含意:

ASP.NET MVC 使用TryUpdateModel 更新的技巧(作者 demo)

http://demo.tc/Post/655

ASP.NET MVC 學習筆記 - TryUpdateModel

http://coding.anyun.tw/2011/05/15/asp-net-mvc-study-notes-tryupdatemodel/

[ASP.NET MVC][筆記] 利用 TryUpdateModel 來做資料更新 (一)  (作者 Jason Yah)

https://dotblogs.com.tw/jasonyah/2013/05/10/103380

 

本範例是從書本上看到的,

即使不用MVC的朋友,也可以實作體會 .TryUpdateMode()的作法

Apress出版,書名「Pro ASP.NET 4.5 in C#」

http://www.apress.com/9781430242543   

簡體中文書:精通ASP.NET 4.5 (第五版) http://www.m.sanmin.com.tw/Product/Index/004686380

這本書也有VB版本,名為 Pro ASP.NET 4.5 in VB

Pro ASP.NET 4.5 in C# Cover Image

 

這個範例很簡單,只有兩個畫面(採用 Web Form)

一個畫面做「輸入」

另一個畫面做「輸出」,把剛剛輸入的值呈現出來。

===============================================================================

首先要撰寫兩個類別檔(Class)

testDB.cs -- 您把它當成一個簡單的資料表,裡面有幾個欄位(在類別裡面,就稱為「公開屬性」吧)

  • t_ID,文章編號。整數。
  • t_TITLE,文章標題。字串。
  • t_APPROVED,文章能否發表?true or false(Boolean布林)
    public int t_ID { get; set; }

    public string t_TITLE { get; set; }

    public bool? t_APPROVED { get; set; }

 

這個類別檔可以參閱:ASP.NET MVC - 模型繫結(MODEL BINDING) 6大建議   (作者 KingKong Bruce)

http://blog.kkbruce.net/2011/10/aspnet-mvc-model-binding6.html

 

testRepository.cs -- 您常在很多MVC的書本與範例中,看見這個關鍵字 Repository

    private static testRepository myRepository = new testRepository();

    private List myResponses = new List();

    //........................................................................................
    public static testRepository GetRepository()
    {
        return myRepository;
    }
    //.........................................................................................
    public IEnumerable GetAllResponses()
    {
        return myResponses;  
    }

    public void AddResponse(testDB userInput)
    {
        myResponses.Add(userInput);
    }
   

 

關於 Repository,如果您想花時間知道他是做什麼的?

可以參閱這些前輩的大作:

Repository,我可能不會用你   (作者 Huan-Lin)

http://huan-lin.blogspot.com/2012/11/repository-yagni.html

[Architecture Pattern] Repository   (作者 Clark)

http://www.dotblogs.com.tw/clark/archive/2012/04/29/71883.aspx

ASP.NET MVC 專案分層架構 Part.3 - 個別 Repository 的資料存取操作   (作者 Kevin Tseng,mrkt)

http://kevintsengtw.blogspot.tw/2012/11/aspnet-mvc-part3-repository.html

該文作者善意的提醒:這一系列的文章並不適合初階及中階的開發人員,如果你是程式開發的初學者或是 ASP.NET MVC 初學者,甚至是開發經驗少於兩年的開發人員,請馬上離開此篇文章。

初學ASP.NET MVC 學習筆記(六)-包裝Model   (作者 lastsecret)

https://dotblogs.com.tw/lastsecret/2010/03/06/13900

 

===============================================================================

現在來寫 Web Form 畫面與程式了

第一支程式,Default_1_Input.aspx  典型的 ASP.NET ( Web Form )

 

        id :        <asp:TextBox ID="t_ID" runat="server"></asp:TextBox>        <br />

        title :        <asp:TextBox ID="t_TITLE" runat="server"></asp:TextBox>        <br />

        approved :

        <asp:DropDownList ID="t_APPROVED" runat="server">

            <asp:ListItem Value="true">Yes</asp:ListItem>

            <asp:ListItem Value="false">No</asp:ListItem>

        </asp:DropDownList>

    

        <br />

        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Submit 送出" />

        <asp:Label ID="Label1" runat="server"></asp:Label>

 

後置程式碼如下:

需要加入 MVC命名空間就能使用 .TryUpdateModel()方法!!

using System.Web.ModelBinding;    // 請自己加入宣告
//******************************************

    protected void Button1_Click(object sender, EventArgs e)
    {
        testDB rsvp = new testDB();

        // TryUpdateModel是全自動的!會把HTML畫面上的表單,直接對應過來。
        // 所以才會在畫面上強調:「控制項ID」最好命名跟「類別檔的公開屬性」一樣的名字。
        if (TryUpdateModel(rsvp, new FormValueProvider(ModelBindingExecutionContext)))
        {
            testRepository.GetRepository().AddResponse(rsvp);
            
            if (rsvp.t_APPROVED.HasValue && rsvp.t_APPROVED.Value)
            {   // 下拉式選單,如果有點選、而且是true的話,執行這一區。
                Label1.ForeColor = System.Drawing.Color.Blue;
                Label1.Text = "恭喜,輸入成功!";
            }
            else
            {
                Label1.ForeColor = System.Drawing.Color.Red;
                Label1.Text = "Sorry...暫不發表!";
            }
        }
    }

 

您可以從這個範例裡面發現:

如果您的HTML設計畫面,控制項的ID是 "預設的" TextBox1、TextBox2、DropDownList1......

那麼這支程式完全 "不會" 運作。

 

如果您的控制項 ID,跟一開始寫好的類別檔 testDB.cs裡面的公開屬性名稱一樣

那麼就OK了。

 

從上面的測試裡面,比起千言萬語.......更能讓初學者有所體會

 

回頭看看一開始,其他前輩的說明,.TryUpdateModel()方法是不是體會多了些?

ASP.NET MVC 學習筆記 - TryUpdateModel

http://coding.anyun.tw/2011/05/15/asp-net-mvc-study-notes-tryupdatemodel/

[ASP.NET MVC][筆記] 利用 TryUpdateModel 來做資料更新 (一)  (作者 Jason Yah)

https://dotblogs.com.tw/jasonyah/2013/05/10/103380

 

照著「」,遠比「只是」,學得更多!!

範例下載:

C#版......  WebSite2013_Repository01.rar

VB版......  WebSite2013_Repository01_VB.rar

 

這個範例,只是這本書的「第一章」而已

你說這本書驚不驚人!......  OMG .......

 

Apress出版,書名「Pro ASP.NET 4.5 in C#」

http://www.apress.com/9781430242543   

簡體中文書:精通ASP.NET 4.5 (第五版) http://www.m.sanmin.com.tw/Product/Index/004686380

這本書也有VB版本,名為 Pro ASP.NET 4.5 in VB

 

我對這本書的介紹:

精通ASP.NET 4.5(人民郵電出版社) / Pro ASP.NET 4.5 in C# (apress)

Pro ASP.NET 4.5 in C# Cover Image

 

Kevin前輩提供兩篇很棒的文章,也請您參考:

ASP.NET MVC 的 Model 使用 ADO.NET     http://kevintsengtw.blogspot.tw/2013/05/aspnet-mvc-model-adonet.html

ASP.NET WebForm 使用分層的 Repository 類別庫專案     http://kevintsengtw.blogspot.tw/2013/05/aspnet-webform-repository.html

 

這時候,您在來做微軟網站上的範例,應該會覺得「又變得」簡單一點點

 

後記:     自從自己仿製出一個簡單成果以後,

          以前看不懂的微軟官方網站範例,我只花一個小時就知道他在做什麼了

 

做中學!真的沒錯   *^_^*

這系列的教學文章很完整,但我(以前)真的看不懂  

Retrieving and displaying data with model binding and web forms

http://www.asp.net/web-forms/tutorials/data-access/model-binding/retrieving-data

 

而且可以把範例裡面的花俏效果都取消,

簡化以後,只留下 Model Binding的東西

下一篇文章 -- 

Model Binding入門、簡介、初試身手 #4 -- 微軟官方網站範例(Model Binding and Web Form)

https://dotblogs.com.tw/mis2000lab/2014/09/22/model_binding_2_microsoft_sample 

 

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程教學,遠距教學 (Web Form 約 51hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程教學,遠距教學 (ASP.NET MVC 約 135hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.tw  或  school (at) mis2000lab.net

 (1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A 

 (2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I 

[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm  。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b  


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

.........   facebook社團   https://www.facebook.com/mis2000lab   ......................

.........  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)。

...................................................................................................................................................... 

ASP.NET MVC  => .NET Core MVC 線上教學  ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講   事先錄好的影片,並非上課側錄!   觀看時,有如「一對一」面對面講課