自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

ASP.NET MVC 3預(yù)覽版試用 多項(xiàng)改進(jìn)詳解

開發(fā) 后端
ASP.NET MVC 3的第一個(gè)預(yù)覽版已經(jīng)發(fā)布了,此次的更新帶來了更多的改進(jìn)。包括視圖、控制器以及JavaScript和AJAX 方面的改進(jìn)。

今天早上,我們發(fā)布了ASP.NET MVC 3的“預(yù)覽1”(”Preview 1”)版本,你可以從http://go.microsoft.com/fwlink/?LinkID=157073下載。

從ASP.NET MVC項(xiàng)目一開始, 我們就使用迭代式的開發(fā)方法,并在開發(fā)周期中定期發(fā)布預(yù)覽版本。在類似今天的預(yù)覽版本中,我們的目標(biāo)是獲得用戶反饋—包括你喜歡的和不喜歡的地方,你覺得有遺漏或不完善的地方。這些反饋相當(dāng)?shù)挠袃r(jià)值—并使最終產(chǎn)品更加、更加地完善。

ASP.NET MVC 3

正如你所料到的,ASP.NET MVC 3就是ASP.NET MVC下一個(gè)主要發(fā)布版本。

ASP.NET MVC 3與ASP.NET MVC 2是兼容的——這也就是說,當(dāng)MVC 3發(fā)布后,它便于你把MVC 2的項(xiàng)目更新到MVC 3上。MVC 3的新功能是建立在MVC 1和MVC 2基礎(chǔ)之上的,這也就意味著,你所掌握的技術(shù),知識,類庫和書籍可以直接用到MVC 3上的。MVC 3只是加了些新的功能—不會(huì)淘汰現(xiàn)有的功能。

ASP.NET MVC 3 可以和ASP.NET MVC 2共存,你可以在機(jī)器上安裝今天的“Preview 1”版本,而不會(huì)影響到你現(xiàn)有的MVC 2項(xiàng)目(除非你顯式指定項(xiàng)目使用MVC 3,否則,它還是繼續(xù)使用MVC 2)。當(dāng)你安裝完“Preview 1”版本后,會(huì)在Visual Studio 2010的“新建項(xiàng)目”對話框添加一些新的ASP.NET MVC 3模板—選中其中一個(gè)就會(huì)為你創(chuàng)建使用MVC 3的項(xiàng)目。

下面是關(guān)于 “Preview 1”版本一些新功能的詳細(xì)介紹。除非我特別說明,所有我這里介紹的功能在你今天可以下載和使用的預(yù)覽版本上都是可用的。將來還會(huì)根據(jù)你的反饋,有更多的新功能會(huì)隨著后續(xù)預(yù)覽版本的發(fā)布而出現(xiàn)。

視圖方面的改進(jìn)

ASP.NET MVC 3 “Preview 1” 在視圖方面的做了很多的改進(jìn)。

添加→視圖對話框

在“Preview 1”版中包括了一個(gè)新的“添加→視圖”對話框,這個(gè)對話框便于你創(chuàng)建視圖模板文件時(shí)選擇要用的語法。它可以讓你選擇任何一個(gè)在你的機(jī)器上安裝的視圖引擎—讓你使用任何一個(gè)你感覺自然的視圖模板。

clip_image002

現(xiàn)在已經(jīng)有很多非常不錯(cuò)的開源視圖模板引擎(包括Spark, NHaml, NDjango,還有一些其它的)—我們可以如今可以更方便把它們集成到Visual Studio中來。

在今天的ASP.NET MVC 3 “Preview 1”版本中,新建視圖對話框里已經(jīng)有兩個(gè)自帶的視圖引擎:ASPX 和 Razor。

#p#

新的“Razor”視圖引擎

這個(gè)月早些時(shí)候,我發(fā)布了一篇關(guān)于我們正在開發(fā)的“Razor”視圖引擎的文章。從這篇文章的回復(fù)來看,已經(jīng)有很多人開始期待著使用它了。好消息來了,你現(xiàn)在可以在“Preview 1”版本中使用它了。

簡單的Razor示例

讓我們來創(chuàng)建一個(gè)非常簡單的在線商店網(wǎng)站,它列出產(chǎn)品類別,然后允許訪問者通過點(diǎn)擊這些類別來查看相關(guān)的產(chǎn)品。你可以從這里下載到完整的示例程序。

clip_image004

下面是StoreController類,它實(shí)現(xiàn)了創(chuàng)建上述場景的兩個(gè)執(zhí)行函數(shù)(“Index”和 “Browse”)。

clip_image006

我們將使用“Razor”視圖引擎來實(shí)現(xiàn)StoreController的視圖模板。

下面就是定義我們通用布局的“Layout.cshtml”布局頁面。“RenderBody()”方法用來指定在基于這個(gè)主布局頁面的視圖模板中填入內(nèi)容的地方。

clip_image008

下面是Index執(zhí)行函數(shù)的視圖模板。它是基于上面提到的布局頁面,然后輸出一個(gè)產(chǎn)品類別名稱的<ul>列表。

clip_image010

上面的模板中,用Html.ActionLink()這個(gè)標(biāo)準(zhǔn)的ASP.NET MVC 輔助函數(shù)去生成一個(gè)指向我們StoreController類中“Browse” 執(zhí)行函數(shù)的鏈接。所有在ASP.NET MVC中現(xiàn)存的HTML 輔助函數(shù)都是可以用在“Razor”視圖中—這一點(diǎn)不但適用于ASP.NET MVC內(nèi)置的HTML輔助函數(shù),也適用于其他人開發(fā)的輔助函數(shù)(包括其他公司或個(gè)人和MvcContrib項(xiàng)目里的)。

下面是給Browse執(zhí)行函數(shù)創(chuàng)建的視圖模板。它列出了一個(gè)類別下的產(chǎn)品。

clip_image012

注意上面我們在foreach語句中使用其Model屬性,獲取傳入Controller的強(qiáng)類型的產(chǎn)品列表的方式。這跟我們在.aspx視圖頁面的方法一樣。Razor也支持我們通過“View”屬性來獲取傳入視圖頁面的無類型“ViewData”。“View”是一個(gè)動(dòng)態(tài)屬性(這是一個(gè).NET 4的新功能)—這給我們一種很簡潔輕便的語法來訪問視圖數(shù)據(jù)(ViewData)。這樣我們只需寫View.Category,而不是ViewData[“Cateogry”]。

#p#

干凈簡潔

上面截圖中的代碼已經(jīng)包括了實(shí)現(xiàn)我們的控制器 + 視圖要做的所有事情。“Razor”使得我們的視圖模板更加干凈簡潔,而且我想,你還會(huì)發(fā)現(xiàn)它的代碼流程很順暢。如果想更多的了解它的語法和它是如何工作的,請參考我的這在個(gè)月早些時(shí)候?qū)懙年P(guān)于“Razor” 的博客文章。你也可以從這里下載上面所提到的示例代碼。

代碼智能提示和加亮顯示

你可能從上面的截圖上已經(jīng)注意到了一件事,在今天發(fā)布的“Preview 1” 版本里,Visual Studio還是不支持對“Razor”文件的代碼提示和加亮顯示。但我們會(huì)在后續(xù)發(fā)布的版本上予以支持。到時(shí),VS 2010的編輯器會(huì)提供對Razor文件的C#/VB代碼提示,同時(shí)也支持HTML/CSS/JavaScript代碼提示。

后續(xù)版本中的改進(jìn)

我們在后續(xù)版本中,會(huì)在如下三個(gè)方面做一些重要改進(jìn):

能夠在”Razor”文件的頂部使用@model語句,就不用顯式繼承一個(gè)基類了,這樣可以簡化代碼。

能夠給站點(diǎn)指定一個(gè)默認(rèn)LayoutPage(布局)頁面,從而不用顯式地在每個(gè)視圖模板分別設(shè)定。這將更加減少視圖模板里的代碼,使得你的代碼看起來更干凈。

不用每次運(yùn)行整個(gè)程序或者啟動(dòng)一個(gè)web服務(wù)器,就能夠?qū)?ldquo;Razor”模板文件進(jìn)行單元測試的能力。

根據(jù)前兩個(gè)改進(jìn),Browse模板可以簡單地寫成這個(gè)樣子:

clip_image014

后續(xù)版本中將會(huì)支持上面的模板語法。編輯器也支持全面的代碼加亮顯示和智能提示。

控制器方面的改進(jìn)

ASP.NET MVC3 “Preview 1”包含了一些很好的針對特定控制器的改進(jìn)。

全局過濾器

ASP.NET MVC 支持通過過濾機(jī)制來描述性地應(yīng)用“橫切”邏輯。 你可以使用屬性語法為控制器和執(zhí)行函數(shù)指定過濾器,如下所示

clip_image016

程序開發(fā)者常常希望將一些過濾器邏輯應(yīng)用于程序中的所有控制器上。 現(xiàn)在ASP.NET MVC3 能夠讓你指定一個(gè)全局的過濾器,這個(gè)過濾器可以應(yīng)用于程序中的所有控制器。你可以通過在RegisterGlobalFilters()函數(shù)中將它加入到GlobalFilters 集合中來實(shí)現(xiàn)這個(gè)目的,這個(gè)函數(shù)被包含在默認(rèn)的Global.asax類模板中。(隨后它會(huì)被Application_Start()函數(shù)調(diào)用)

clip_image018

在MVC3中,這個(gè)過濾器的判定邏輯非常靈活,你可以配置一個(gè)全局過濾器,使它只在某些條件符合的時(shí)候才啟用(例如:啟用調(diào)試,或者針對一個(gè)請求使用特定HTTP響應(yīng)等等)。 過濾器可以從一個(gè)依賴注入(DI-Dependency Injection)容器中獲取—詳見下文。

新的動(dòng)態(tài)ViewModel屬性

ASP.NET MVC 控制器支持“ViewData”屬性, 這個(gè)屬性能夠使你通過延遲綁定的字典API傳入數(shù)據(jù)到視圖模板中。 例如:

clip_image020

ASP.NET MVC3仍然支持 “ViewData” API,但是在動(dòng)態(tài)類型的控制器中,MVC3用一個(gè)新的“ViewModel”屬性增強(qiáng)了”ViewData” API, 這便于你在使用VB和C#支持的動(dòng)態(tài)語言來傳遞ViewData的數(shù)據(jù)時(shí),語法比當(dāng)前的字典API更加輕便、簡潔?,F(xiàn)在你可以編寫下面的代碼來得到跟上面同樣的結(jié)果:

clip_image022

你不需要定義任何強(qiáng)類型的類來使用ViewModel屬性,因?yàn)樗莿?dòng)態(tài)屬性,你只要使用該屬性的 get/set 方法, 在運(yùn)行時(shí)會(huì)動(dòng)態(tài)解析。它內(nèi)部存儲(chǔ)了ViewData字典的屬性鍵值對。

新的ActionResult類型

ASP.NET MVC3 “Preview 1” 包含一些新的ActionResult類型和對應(yīng)的輔助函數(shù)。

HttpNotFoundResult

新的HttpNotFoundResult 類用來指明:找不到當(dāng)前URL請求的資源。 它會(huì)向調(diào)用客戶端返回HTTP狀態(tài)碼404。你可選擇使用新的HttpNotFound()輔助函數(shù)來返回它的一個(gè)實(shí)例, 如下例所示:

clip_image024

***性重定向

HttpRedirectResult類有個(gè)新的布爾類型的屬性Permanent,這個(gè)屬性用來指明是否會(huì)發(fā)生一個(gè)***性的重定向。 ***重定向使用的HTTP狀態(tài)碼是301。 同時(shí)Controller類現(xiàn)在有3個(gè)新的函數(shù)來執(zhí)行***重定向:RedirectPermanent(), RedirectToRoutePermanent(), 和 RedirectToActionPermanent()。 這些函數(shù)返回一個(gè)Permanent屬性為trueHttpRedirectResult實(shí)例。

HttpStatusCodeResult

新的HttpStatusCodeResult類能夠用來顯式設(shè)置響應(yīng)狀態(tài)碼及其詳細(xì)描述。

JavaScript 和 AJAX 方面的改進(jìn)

ASP.NET MVC 3包含內(nèi)嵌的JSON 綁定支持,能使執(zhí)行函數(shù)接受JSON編碼的數(shù)據(jù),并將數(shù)據(jù)模型綁定到執(zhí)行函數(shù)的參數(shù)上。

為了理解功能的作用,請細(xì)看下面jQuery客戶端的JavaScript代碼。它定義了一個(gè)當(dāng)客戶端點(diǎn)擊保存按鈕時(shí)調(diào)用的save事件處理程序。事件處理函數(shù)的代碼構(gòu)造了一個(gè)客戶端的JaveScriptproduct對象,這個(gè)對象包含3個(gè)成員域,它們的值都是從HTMLinput元素獲取的。接著jQueryajax()方法向server端的/Store/UpdateProduct地址POST提交一個(gè)包含那個(gè)產(chǎn)品對象的JSON請求。

clip_image026

現(xiàn)在ASP.NET MVC 3 便于你在服務(wù)器上通過下面的執(zhí)行函數(shù)來實(shí)現(xiàn)/Store/UpdateProduct URL:

clip_image028

上面的UpdateProduct()執(zhí)行函數(shù)接受一個(gè)強(qiáng)類型的Product對象作為參數(shù)。ASP.NET MVC 3 能夠在服務(wù)器端自動(dòng)綁定到來的JSON請求到.NET Product 類型,無需你去實(shí)現(xiàn)一些客戶綁定或列集邏輯。 ASP.NET MVC內(nèi)置的模型和輸入驗(yàn)證特性都會(huì)正常運(yùn)作。

在牽涉到客戶端模板和數(shù)據(jù)綁定等場景里(參見我之前的博客),我們認(rèn)為這個(gè)能力顯得尤為重要。你可以通過在客戶端執(zhí)行客戶端模板來編排數(shù)據(jù)格式并顯示一個(gè)單獨(dú)的數(shù)據(jù)項(xiàng)或者數(shù)據(jù)集合。 ASP.NET MVC 3 能夠輕易地將客戶端模板和服務(wù)器端處理JSON數(shù)據(jù)的執(zhí)行函數(shù)連接起來。

后續(xù)在JavaScript/AJAX方面的改進(jìn)

后續(xù)版本里,ASP.NET MVC 3將包含更好的支持分離式JavaScript。ASP.NET MVC 3也將通過它內(nèi)置的驗(yàn)證輔助函數(shù)來直接支持jQuery驗(yàn)證類庫。

在模型驗(yàn)證方面的改進(jìn)

ASP.NET MVC 2 在模型驗(yàn)證方面已經(jīng)有了顯著的改進(jìn)。詳情請參看我之前發(fā)表的博客。

ASP.NET MVC 3又有了進(jìn)一步的增強(qiáng),它現(xiàn)在支持.NET 4在命名空間System.ComponentModel.DataAnnotations中引入了幾個(gè)新的驗(yàn)證功能。

MVC 3 支持.NET 4中新的數(shù)據(jù)標(biāo)記驗(yàn)證元數(shù)據(jù)特性,比如說DisplayAttribute.

MVC3支持.NET 4 對ValidationAttribute類的改進(jìn)。 在.NET 4中,ValidationAttribute 類引入了一個(gè)IsValid重載函數(shù),該函數(shù)提供了關(guān)于驗(yàn)證上下文更多的信息,比如說當(dāng)前正在被驗(yàn)證的對象。這使得我們有更加豐富的驗(yàn)證手段,比如使用模型的其它屬性值來驗(yàn)證當(dāng)前值。

MVC 3 支持在.NET 4中引入的IValidatableObject接口。該接口支持模型層面的驗(yàn)證,并且在驗(yàn)證出錯(cuò)時(shí),它可以針對整個(gè)模型狀態(tài)或者模型內(nèi)的兩個(gè)屬性之間關(guān)系提供一些出錯(cuò)信息。

下面的例子使用IValidatableObject接口來實(shí)現(xiàn)自定義驗(yàn)證方法。此函數(shù)可以將驗(yàn)證規(guī)則應(yīng)用到多個(gè)屬性上,在出錯(cuò)時(shí)可以發(fā)出多種出錯(cuò)信息(可以是類似下面例子中的消息或一個(gè)導(dǎo)致出錯(cuò)屬性的名稱列表)。

clip_image030

ASP.NET MVC 3綁定模型時(shí)會(huì)考慮IValidateObject接口(除了使用其它一些在MVC2時(shí)就已經(jīng)支持的驗(yàn)證方法之外),通過該接口獲得驗(yàn)證出錯(cuò)的錯(cuò)誤消息,在視圖中用內(nèi)置的HTML表單輔助函數(shù)標(biāo)記或高亮顯示受影響的字段。

clip_image032

ASP.NET MVC 3 還引入了另一個(gè)新的接口:IClientValidatable。在運(yùn)行時(shí),ASP.NET MVC 3通過該接口可以確定驗(yàn)證器是否支持客戶端驗(yàn)證,該接口的被特意設(shè)計(jì)成可以與很多驗(yàn)證架構(gòu)集成。此外,IMetadataAware接口也是在MVC 3 中新引入的,該接口使得創(chuàng)建模型元數(shù)據(jù)的過程更加簡單。

在依賴注入方面的改進(jìn)

ASP.NET MVC 3更好地支持了依賴注入與DI/IoC容器的集成。

在“Preview 1”版中,我們從如下幾個(gè)方面支持依賴注入技術(shù):

1. 控制器(注冊和注入控制器工廠,注入控制器)

2. 視圖 (注冊和注入視圖引擎,把依賴項(xiàng)注入到視圖頁面中)

3. 動(dòng)作過濾器 (定位和注入過濾器)

在后續(xù)版本中,我們將研究在以下方面對注入技術(shù)的支持:

· 模型綁定器(注冊和注入)

· 值生成器(注冊和注入)

· 驗(yàn)證方式提供程序(注冊和注入)

· 模型元數(shù)據(jù)生成器(注冊和注入)

ASP.NET MVC 3 將支持Common Service Locator 庫和所有的支持IServiceLocator 接口的DI容器。 這樣一來,使用ASP.NET MVC 集成任何支持Common Service Locator的DI容器將變得很容易。

注意:在“Preview 1”版中,我們在代碼中重新定義了CSL接口,從而在我們的安裝文件中不用包含CSL 動(dòng)態(tài)鏈接庫?,F(xiàn)有的CSL實(shí)現(xiàn)將不可以用在“Preview 1”版上,相反,CSL將需要針對我們的接口重新編譯才能使用。在后續(xù)版本中將更容易使用CSL,節(jié)省了這個(gè)額外的步驟。

Brad Wilson正在寫一個(gè)關(guān)于ASP.NET MVC 3 對注入依賴技術(shù)的支持方面的系列文章。 下面的連接是Brad Wilson前期的一些文章:

· ASP.NET MVC 3服務(wù)定位器:簡介(***章)

· ASP.NET MVC 3服務(wù)定位器:控制器(第二章)

· ASP.NET MVC 3服務(wù)定位器:視圖(第三章)

· ASP.NET MVC 3服務(wù)定位器:過濾器(第四章)

點(diǎn)擊這里下載一個(gè)簡單的ASP.NET MVC 3示例,它演示了如何在ASP.NET MVC 3中使用已廣泛應(yīng)用的Ninject依賴注入容器。

下載和鏈接

點(diǎn)擊這里下載ASP.NET MVC 3“Preview 1”版,并在ASP.NET MVC Forum 留下您的反饋信息。

一旦安裝好ASP.NET MVC 3,你就可以下載并運(yùn)行前面介紹的簡單Razor示例程序。

參閱我之前的關(guān)于“Razor”的博客了解它的工作方式和代碼語法。此外,在我最近的博客EF4 代碼優(yōu)先類庫 和 EF4 代碼優(yōu)先數(shù)據(jù)庫結(jié)構(gòu)映射,你將看到使用EF4 代碼優(yōu)先類庫和 SQL Express創(chuàng)建前面示例程序的數(shù)據(jù)庫結(jié)構(gòu)和模型層。另外你也可以收聽Scott Hanselman的 ASP.NET MVC 3播客,或者收看Channel 9上關(guān)于ASP.NET MVC 3的視頻。

總結(jié)

我們非常興奮能夠發(fā)布ASP.NET MVC 3 “Preview 1”版,我們正在著手準(zhǔn)備接收大家的反饋意見。

我們發(fā)布這個(gè)預(yù)覽版的最主要目的就是收集反饋意見 – 哪些地方好,哪些地方不好以及還遺漏哪些地方。您的意見對我們來說是非常寶貴的,最終會(huì)幫助我們完善產(chǎn)品。 如果您安裝了今天的版本,請到網(wǎng)站http://forums.asp.net的ASP.NET MVC論壇里提出您的意見和報(bào)告任何您發(fā)現(xiàn)的問題。我們的開發(fā)團(tuán)隊(duì)會(huì)密切關(guān)注論壇里面的反饋意見,也很樂意幫助您解決您碰到的任何問題。

我們會(huì)逐條審閱所有的反饋意見,使更新版ASP.NET MVC 3變得更加***。

希望這能對您有所幫助。

原文標(biāo)題:ASP.NET MVC 3(預(yù)覽 1)簡介

鏈接:http://blog.joycode.com/scottgu/archive/2010/08/14/116046.joy

【編輯推薦】

  1. 添加設(shè)置ASP.NET Web時(shí)出現(xiàn)問題
  2. 詳細(xì)說明ASP.NET 2.0功能支持
  3. 強(qiáng)化部署ASP.Net 2.0配置應(yīng)用程序
  4. 微軟PDC2009直擊:改進(jìn)ASP.NET 4運(yùn)行時(shí)
  5. 詳解ASP.NET MVC 2自定義驗(yàn)證
責(zé)任編輯:彭凡 來源: 博客堂
相關(guān)推薦

2009-08-03 08:51:51

ASP.NET MVC

2011-09-15 14:40:56

ASP.NET MVC

2011-09-16 14:00:24

ASP.NET 4.5

2010-10-12 09:52:02

ASP.NET MVC

2011-04-14 09:19:22

ASP.NET MVC

2010-03-19 09:17:16

ASP.NET MVC

2011-04-18 09:35:59

ASP.NET MVC

2010-10-08 14:32:32

ASP.NET MVCNuPack

2010-03-23 08:42:26

ASP.NET MVC

2009-09-18 10:20:26

PRG數(shù)據(jù)驗(yàn)證

2009-07-24 13:20:44

MVC框架ASP.NET

2010-07-29 10:06:06

ASP.NET MVC

2009-09-10 09:50:47

ASP.NET MVC

2009-07-31 12:43:59

ASP.NET MVC

2011-01-15 23:07:59

2009-10-29 09:15:32

ASP.NET MVCDropDownLis

2009-07-29 16:08:07

ASP和ASP.NET

2017-03-06 11:13:57

ASP.NETCoreMVC

2009-07-23 15:44:39

ASP.NET MVC

2009-07-22 10:09:59

ASP.NET MVC
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號