[C#.NET][ASP.NET] Model Binding in Web Form

[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 (顯示用) 屬性

image

 

image_thumb

 

欄位抬頭名稱

SNAGHTML10e30d1c

 

驗証

後端:

跟 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" />

image

它是一個簡單的前端驗証,資料還沒往後端送就攔截下來了

 

本文章節:

SelectMethod:

UpdateMethod:

DeleteMethod:

InsertMethod:

Web.Config:


Entity Model:

這裡我會用的 EF Code first,Model Binding 需要集合物件就能綁定,不一定要 EF,EF只是幫我撈資料放到集合裡而已

https://dotblogsamples.codeplex.com/SourceControl/latest#Simple.ModelBindingSortAndPaging/Simple.ModelBindingSortAndPaging/Models/Account.cs

 

 

EF DbContext & Initialize

https://dotblogsamples.codeplex.com/SourceControl/latest#Simple.ModelBindingSortAndPaging/Simple.ModelBindingSortAndPaging/Models/ThreeLayerDbContext.cs

https://dotblogsamples.codeplex.com/SourceControl/latest#Simple.ModelBindingSortAndPaging/Simple.ModelBindingSortAndPaging/Models/ThreeLayerCreateDatabaseIfNotExists.cs

 

SelectMethod:

前端

該有的分頁、排序都有,重點是 ItemType、 DataKeyNames 一定要設


    SelectMethod="GetAllAccounts"
    ItemType="Simple.ModelBindingSortAndPaging.Models.Account"
    AllowPaging="True"
    AllowSorting="True"
    DataKeyNames="UserId"
    PageSize="2">
</asp:GridView>

 

 

後端

這裡幹了一件事

  1. 回傳 IQueryable<Account>

{
    var accounts = this._db.Accounts;
    return accounts;
}

 

每一次的翻頁、排序都是依照 PageSize 的大小,自動幫我下 TOP,真 cool

SNAGHTML6a71273

 

 

UpdateMethod:


{
    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();
}

 

DeleteMethod:


{
    var query = this._db.Accounts.FirstOrDefault(a => a.UserId == userId);
    if (query == null)
    {
        return;
    }
    this._db.Accounts.Remove(query);
    this._db.SaveChanges();
}

 

InsertMethod:

後端


{
    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>

 

 

Web.Config:

最後加上以下設定

<appSettings>
  <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>

 

前端完整程式碼:https://dotblogsamples.codeplex.com/SourceControl/latest#Simple.ModelBindingSortAndPaging/Simple.ModelBindingSortAndPaging/WebForm2.aspx

後端完整程式碼:https://dotblogsamples.codeplex.com/SourceControl/latest#Simple.ModelBindingSortAndPaging/Simple.ModelBindingSortAndPaging/WebForm2.aspx.cs

 


文章出自: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

Image result for microsoft+mvp+logo