天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

ASP.NET MVC 2擴展點之Model Binder

  Model Binder在ASP.NET MVC中非常簡單。簡單的說就是你控制器中的Action方法需要參數數據;而這些參數數據包含在HTTP請求中,包括表單上的Value和URL中的參數等。而ModelBinder的功能就是將這些個表單上的Value和URL中的參數換成對象,然后將這些對象綁定到Action的參數上面。我簡單的畫了一個圖,看起來會更加直觀。

  在ASP.NET mvc中你可以寫類似下面這樣的代碼:

[HttpPost]
public ActionResult Create()
{
Book book = new Book();
book.Title = Request.Form["Title"];
// ...
return View();
}

  但是這樣的寫法是非常不可取的,因為代碼不容易閱讀,也不易測試。再看下面的寫法:

[HttpPost]
public ActionResult Create(FormCollection values)
{
Book book = new Book();
book.Title = values["Sex"];
// ...
return View();
}

  這樣的寫法就可以不用從Request中獲取數據了,這樣能滿足一些情況,比直接從Request中獲取數據要直觀。但是如果在Action需要的數據既要來自表單上的值,又要來自URL的query string。這種情況單單FormCollection是不行的。看下面代碼:

[HttpPost]
public ActionResult Create(Book book)
{
// ...
return View();
}

  上面的代碼就非常的直觀了,這需要我們的model binder創建一個book對象,然后直接從這個對象的屬性中取值。這個book對象的數據自然也是來自Form和URL。有時候,我們的DefaultModelBinder轉換的能力必經有限,也不夠透明化,一些特殊和復雜的情況就需要我們自定義Model Binder。下面我講講如何去自定義Model Binder。

  1、首先我們定義一個Book的實體類:

public class Book
{
public string Title { get; set; }
public string Author { get; set; }
public DateTime DatePublished { get; set; }
}

  2、自定義的model binder需要繼承IModelBinder或者它的子類。數據可以從bindingContext獲取。

public class BookModelBinder : IModelBinder
{

public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var book = (Book)(bindingContext.Model ?? new Book());
book.Title = GetValue<string>(bindingContext, "Title");
book.Author = GetValue<string>(bindingContext, "Author");
book.DatePublished = GetValue<DateTime>(bindingContext, "DatePublished");
if (String.IsNullOrEmpty(book.Title))
{
bindingContext.ModelState.AddModelError("Title", "書名不能為空?");
}
return book;
}
private T GetValue<T>(ModelBindingContext bindingContext, string key)
{
ValueProviderResult valueResult= bindingContext.ValueProvider.GetValue(key);
bindingContext.ModelState.SetModelValue(key, valueResult);
return (T)valueResult.ConvertTo(typeof(T));
}
}

  從上面代碼可以看出,自定義的ModelBinde非常的自由,可以自由的將Form上的一個key對應實體的一個屬性,也可以加入一些驗證的邏輯。當然還可以加入一些其他的自定義邏輯。

  3、寫好BookModelBinder之后,我們只需要簡單的注冊一下就行了,在Global.asax添加下面代碼:

ModelBinders.Binders.Add(typeof(Book), new BookModelBinder());

  總結:本文簡單介紹了一下ASP.NET MVC的Model Binder機制。如果敘述有問題,歡迎指正。

NET技術ASP.NET MVC 2擴展點之Model Binder,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲欧美国产综合在线 | 偷窥自拍性综合图区 | 妈妈的职业3完整版在线播放 | 果冻传媒完整免费网站在线观看 | 色老99九久精品偷偷鲁 | 免费国产综合视频在线看 | 日本无翼恶漫画大全优优漫画 | 日韩中文字幕亚洲无线码 | 嗯啊哈啊好棒用力插啊 | 福利视频一二三在线观看 | 2020精品极品国产色在线 | 99在线观看视频 | 高清一区二区亚洲欧美日韩 | 免费国产成人 | 99久久国产免费福利 | 国语自产二区高清国语自产拍 | 精品无码国产自产在线观看水浒传 | 久久精品亚洲AV高清网站性色 | 男女爽爽无遮挡午夜视频在线观看 | 国产精品视频第一区二区三区 | 国产一区二区精品视频 | 国产午夜精品自在自线之la | 国产不卡一卡2卡三卡4卡网站 | 亚洲高清在线视频 | 先锋影音av无码第1页 | 丝瓜视频樱桃视频在线观看免费 | aa级毛片毛片免费观看久 | 性白俄罗斯高清xxxxx | 亚洲视频在线观看免费 | 亚洲视频精品在线观看 | 黑人操白逼 | 精品欧美一区二区三区久久久 | 黑兽在线观看高清在线播放樱花 | 無码一区中文字幕少妇熟女网站 | www.狠狠色| 精品高潮呻吟99AV无码 | 粉嫩小护士 | 久久亚洲AV无码精品午色夜麻豆 | 国产成人精品系列在线观看 | 国产精品免费大片 | 我强进了老师身体在线观看 |