[C#.NET][ASP.NET] Model Binding in Web Form
Web Form 在 .NET 4.5 從 MVC 那邊抄了一個非常好用的機制叫做 Model Binding ,原本需要依賴 Data Source 的 GridView 控制項,現在可以不需要了,也加入了驗証
CRUD
- SelectMethod
- UpdateMethod
- DeleteMethod
- InsertMethod
ItemType
型別名稱,命名空間+類別,比如 Simple.ModelBindingSortAndPaging.Models.AccountViewModel
在前端也能直接使用強型別,在 Web Form 前端寫 LINQ 不是夢 現在多了BindItem (修改用)和 Item (顯示用) 屬性
欄位抬頭名稱
驗証
後端:
跟 ASP.NET MVC 一樣的東西,在 Model 上加上相關的驗証 Attribute 即可
[Range(18, int.MaxValue, ErrorMessage = "你未成年")]
public int 年齡 { get; set; }
前端:
綁定的欄位使用 DynamicField ,欄位驗証、欄位型別錯誤就會在旁邊多一個星號
<asp:DynamicField DataField="年齡"></asp:DynamicField>
然後,加上驗証錯誤訊息
asp:ValidationSummary ID="ValidationSummary1" runat="server"
ShowModelStateErrors="true"
HeaderText="List of validation errors"
Font-Bold="True" ForeColor="#FF3300" />
它是一個簡單的前端驗証,資料還沒往後端送就攔截下來了
本文章節:
Entity Model:
這裡我會用的 EF Code first,Model Binding 需要集合物件就能綁定,不一定要 EF,EF只是幫我撈資料放到集合裡而已
EF DbContext & Initialize
前端
該有的分頁、排序都有,重點是 ItemType、 DataKeyNames 一定要設
SelectMethod="GetAllAccounts" ItemType="Simple.ModelBindingSortAndPaging.Models.Account" AllowPaging="True" AllowSorting="True" DataKeyNames="UserId" PageSize="2"> </asp:GridView>
後端
這裡幹了一件事
- 回傳 IQueryable<Account>
{ var accounts = this._db.Accounts; return accounts; }
每一次的翻頁、排序都是依照 PageSize 的大小,自動幫我下 TOP,真 cool
{ if (!ModelState.IsValid) { return; } var query = this._db.Accounts.FirstOrDefault(a => a.UserId == account.UserId); if (query == null) { return; } this._db.Entry(query).CurrentValues.SetValues(account); this._db.SaveChanges(); }
{ var query = this._db.Accounts.FirstOrDefault(a => a.UserId == userId); if (query == null) { return; } this._db.Accounts.Remove(query); this._db.SaveChanges(); }
後端
{ if (!ModelState.IsValid) { return; } this._db.Accounts.Add(account); this._db.SaveChanges(); this.Server.Transfer("/WebForm2.aspx"); }
前端
ItemType="Simple.ModelBindingSortAndPaging.Models.Account" DefaultMode="Insert" SelectMethod="GetAllAccounts" InsertMethod="InsertAccount" GridLines="None"> <Fields> <asp:CommandField ShowInsertButton="True" ShowCancelButton="False" ButtonType="Button" /> </Fields> </asp:DetailsView>
最後加上以下設定
<appSettings>
<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>
文章出自:http://www.dotblogs.com.tw/yc421206/archive/2014/12/17/147690.aspx
專案位置:https://dotblogsamples.codeplex.com/SourceControl/latest#Simple.ModelBindingSortAndPaging/
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET