ASP.NET MVC Beta版新特性之IValueProvider
ASP.NET MVC Beta版發(fā)布于2008年10月。該beta版本的特性已經(jīng)非常接近于正式版V1的完整特性,雖然還會在最終的V1版發(fā)布之前加入若干個特性(包括幾個VS工具增強(qiáng)等)。但開發(fā)團(tuán)隊決定將這個版本稱為“beta”版本,是因為其品質(zhì)和測試要比以前的預(yù)覽版本高(其中包含了許多缺陷修補(bǔ)和性能調(diào)校方面的工作),他們感覺,其中的核心功能現(xiàn)在已經(jīng)“燒制”得足夠好,從這個版本到最終版不會有重大變動了。
在ASP.NET MVC Beta版中,在UpdataModel方法中提供了一個帶有IValueProvider參數(shù)的重載。那么這個IValueProvider有什么用呢?
我們先來看一個簡單的場景,例如我們的blog系統(tǒng)有一個Post的對象,Post對象有一個Tags屬性和Categories屬性,他們的類型分別是:
Post.Tags : StateList< string> (BlogEngine.NET 中的一個List< T>的擴(kuò)展類型)
Post.Categories : StateList< Category> 假如我們要使用UpdataModel方法來對我們Post過來的Form表單數(shù)據(jù)更新到我們的Post對象中,可能會有如下的代碼:
- /// < summary>
- /// 將提交過來的新隨筆表單內(nèi)容保存到數(shù)據(jù)庫
- /// < /summary>
- [AcceptVerbs("POST"), ActionName("NewPost")]
- public ActionResult SaveNewPost(FormCollection form)
- {
- Post post = new Post();
- try
- {
- UpdateModel(post, new[] { "Title", "Content", "Slug", "Tags", "Categories" });
- }
- catch
- {
- return View(post);
- }
- ..
- }
很明顯,在上面的代碼中,我們用UpdateModel來更新Tags和Categories屬性的時候,是不可能成功的,因為UpdateModel方法不知道怎樣將Form提交過來的"Tags"和"Categories"數(shù)據(jù)轉(zhuǎn)換為StateList< string>類型和StateList< Category>類型。這時候就需要我們提供一個ValueProvider,來進(jìn)行這個轉(zhuǎn)換。
以上就是ASP.NET MVC Beta版中IValueProvider的作用。
【編輯推薦】