ASP.NET MVC實例和新RC版本中視圖方面的改進
我們在www.asp.net網(wǎng)站上推出了一個新的ASP.NET MVC 設計陳列室。這個設計陳列室里陳列了你可以下載和輕易使用在你的ASP.NET MVC應用中的免費HTML設計模板。每個設計模板中包括了一個Site.master文件,一個CSS樣式表文件,也許還有一套圖片,用戶控件,以及支持它們的輔助方法等。
陳列室允許你在線預覽每個設計,以及下載一個你可以解出和集成進你的網(wǎng)站的模板.zip版本。該陳列室允許任何人在創(chuàng)作共用許可(creative commons license)下創(chuàng)建和提交新的設計。訪客可以對它們進行投票,提供反饋。最受歡迎的設計會在陳列室的頂部顯示。
我們認為這會給開發(fā)人員提供一個很有用的方式來更輕松地創(chuàng)建有吸引力的,與標準兼容的網(wǎng)站。希望還能鼓勵大家創(chuàng)建和共享可輕易為他人重用的設計。
即將推出的最終版候選版本中的View方面的改進
說到UI這個話題,我想我也應該與大家分享即將推出的ASP.NET MVC最終版候選版本(Release Candidate,簡稱RC)中的一些與視圖有關的改進的細節(jié)。除了缺陷修補外,RC版本還融合了若干個特定于視圖的新功能和來自社區(qū)的建議。
不需要后臺代碼文件的視圖
基于許多人的反饋,我們決定做一個變動,這樣MVC視圖文件在默認情形下不再擁有后臺代碼文件。這個變動有助于強化視圖在MVC世界中的目的(視圖意在純粹的顯示,不該包含任何與顯示無關的代碼),去掉項目中沒被使用的文件(對大多數(shù)人來說):
在ASP.NET MVC Beta版本中,開發(fā)人員可以通過在視圖中的Inherits(繼承)屬性上使用泛型的CLR句法來除去后臺代碼文件,但這個CLR句法,說得輕一點的話,非常難以發(fā)現(xiàn)而且非常難用。ASP.NET MVC開發(fā)團隊結合了ASP.NET中現(xiàn)有的幾個擴展性功能,將在ASP.NET RC版本中,在Inherits屬性中提供一個標準VB/C#語言句法:
不使用后臺代碼文件的另一個好處是,在你將視圖文件加到項目中時,你會馬上得到intellisense。在Beta版本中,你需要在創(chuàng)建視圖后做一次編譯才能在其中得到代碼intellisense。RC版本將使得添加和立刻編輯視圖的流程免去了編譯之累,變得更加緊湊。
#p#
視圖的頂級Model屬性
在ASP.NET MVC的早期版本中,你使用ViewData.Model屬性來訪問傳給視圖的強類型的模型對象:
上面的句法還是可用的,雖然現(xiàn)在ViewPage上還有一個頂級的Model屬性可為你所用:
這個屬性的作用跟先前的代碼例子是一樣的,它主要的好處在于它允許你編寫的代碼更加簡明。
HTML/AJAX輔助對象現(xiàn)在允許表達式句法
有一個不少人都提出的要求是,在使用視圖的HTML和AJAX輔助對象時,在指稱Model時使用強類型表達式的句法(而不是字符串)的能力。
在ASP.NET MVC Beta版本中,這是不可能的,因為HtmlHelper和AjaxHelper輔助類并沒有在它們的簽名中呈示模型的類型,所以大家需要建造直接基于ViewPage
例如,我可以使用下面的代碼建造一個(非常簡單的)強類型TextBox輔助方法:
然后可以這樣,在我的任意一個視圖中,用它來綁定一個Product模型對象:
Visual Studio將在源代碼編輯器中操作View的模型時,以這種方式對強類型的表達式句法提供完整的intellisense:
注:核心ASP.NET MVC V1程序集中的HTML輔助擴展還將使用現(xiàn)有的句法(不是基于表達式的),我們正計劃在MVCFutures程序集中加入基于表達式的版本。當然,你還可以使用字符串或者強類型的表達式,來添加你自己的輔助方法。所有這些內(nèi)置的輔助方法都是可以去掉的(因為他們是擴展方法),如果你要用自己的版本來替換或覆蓋它們的話。
#p#
Scaffolding支持
ASP.NET MVC RC版本還包括了在Visual Studio中使用新的ASP.NET MVC "Add View"命令創(chuàng)建視圖時的自動的"UI scaffolding" 支持。這個scaffolding支持將允許針對任何.NET 類型或對象的自動的視圖生成,意味著它對POCO類,LINQ to SQL, LINQ to Entities, NHibernate, SubSonic, LLBLGen Pro,或者任何其他對象模型都工作。Scaffolding引擎使用了反射來獲取View的模型類型的公開接口,然后將它們傳給scaffolding模板,在生成的視圖中填充基于它的合適HTML標識。
例如,假定我們有一個ProductsController類,想創(chuàng)建一個它的"Edit" action,來顯示特定產(chǎn)品的編輯視圖。使用RC版本,我們可以象這樣,在我們的"Edit" action方法中右擊,選擇"Add View"上下文菜單命令:
然后在"Add View" 對話框中,我們可以表示我們將把Product類型傳給我們的View:
我們可以表示我們要創(chuàng)建一個"Empty" 視圖模板(象上面那樣),或者表示我們要VS針對我們提供的Product對象自動提供一個"Edit"表單視圖的基本架子:
如果我們選擇"Edit" 模板, VS會自動為我們生成一個文件,該文件含有合適的HTML和驗證輔助方法來生成一個可編輯的表單視圖:
然后我們可以運行應用,馬上得到一個編輯界面:
#p#
然后我們可以進去,將生成的edit.aspx文件做任意改動。
我們發(fā)布的scaffolding系統(tǒng)的一個非常棒的東西是,它是使用Visual Studio的內(nèi)置T4代碼生成系統(tǒng)實現(xiàn)的(Scott Hanselman在這里有一篇非常好的相關博客)。隨ASP.NET MVC發(fā)布的"List(列表)", "Edit(編輯)", "Create(創(chuàng)建)" and "Details(細節(jié))" 模板可以做完全定制,或者用你自己的T4模板做替換(或者從ASP.NET MVC設計陳列室下載)。所以,如果你自己有特別的方式生成HTML的話,或者想要使用自定義的HTML輔助類(譬如,基于強類型表達式的輔助類),那你可以更新默認的模板,然后scaffolding系統(tǒng)之后就會使用它們。
我們計劃允許模板可以在整個機器的層次,以及每個項目的層次上被置換(這樣,你可以在源碼控制中簽入特定于應用的scaffolding模板,在團隊成員間共享)。
編輯視圖的MSBuild任務
在默認情形下,當你編譯ASP.NET MVC項目時,它會編譯項目中除了視圖文件中代碼以外的所有代碼。在ASP.NET MVC Beta中,你想要編譯視圖的話,你需要編寫你自己的 MSBuild任務。ASP.NET MVC RC版本現(xiàn)在包含了一個內(nèi)置的 MSBuild 任務,你可以用它來將視圖包括成為項目編譯過程的一部分。它會核實應用中所有視圖和母版頁的句法和行內(nèi)代碼,如果遇到問題的話,它會給你編譯錯誤信息。
但因為性能的緣故,我們不建議在開發(fā)期間運行它來做快速編譯,但將它加到特定的編譯配置(例如,staging和部署)或者在與 Build 或 CI (連續(xù)集成)服務器一起使用時是非常方便的。
即將推出的ASP.NET MVC RC版本的其他一些功能
上面是RC版本中一些特定于視圖的功能的簡短列表。
在RC版本中,還有許多其他的功能和要求,這些包括:IDataErrorInfo支持,允許模型匯報驗證錯誤信息,以及更豐富的錯誤驗證擴展性以允許你使用自己的方式來匯報模型驗證信息到ModelBinders中(IDataErrorInfo支持是建造在這個的基礎之上的);新的FileResult和JavaScriptResult的ActionResult 類型(允許你更輕松地下載文件和可執(zhí)行的JavaScript到瀏覽器中);內(nèi)置的 jQuery -vsdoc intellisense支持;重構了的AccountController支持,以促成更簡單的表單登錄場景的單元測試和擴展性;各種各樣的項目模板改進,隨處可見的眾多擴展性;諸多的缺陷修補等。
【編輯推薦】