日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

我要学ASP.NET MVC 3.0(一): MVC 3.0 的新特性

發(fā)布時(shí)間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 我要学ASP.NET MVC 3.0(一): MVC 3.0 的新特性 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

摘要

MVC經(jīng)過其1.0和2.0版本的發(fā)展,現(xiàn)在已經(jīng)到了3.0的領(lǐng)軍時(shí)代,隨著技術(shù)的不斷改進(jìn),MVC也越來越成熟。使開發(fā)也變得簡潔人性化藝術(shù)化。

園子里有很多大鳥都對MVC了如指掌,面對問題猶同孫悟空的七十二變一般游刃有余,令人羨慕。大鳥們的著作我們作為菜鳥看了又看,讀了又讀但是還是對MVC3.0的了解不是很深。

這種杯具的情況豈止是杯具呀,那簡直就是杯具。綜合分析后得出結(jié)論:眼高手低!!!

最后菜鳥痛定思過,決定從最基本的開始一步一步開始學(xué)習(xí)MVC 3.0 也希望想學(xué)習(xí)MVC3.0的小菜們分享一下下。。。。

前言

ASP.NET MVC3 在 ASP.NET MVC 1 和 2 的基礎(chǔ)上,增加了大量的特性,使得代碼更加簡化,并且可以深度擴(kuò)展。這篇文章提供包含在此次發(fā)布中的許多新特性的說明,分為以下部分:

  • Razor 視圖引擎
  • 支持多視圖引擎
  • Controller?改進(jìn)
  • JavaScript?和 Ajax
  • Model?驗(yàn)證的改進(jìn)
  • 依賴注入 Dependency Injection 的改進(jìn)
  • 其他新特性

?

Razor 視圖引擎

ASP.NET MVC3 帶來了一種新的名為 Razor 的視圖引擎,提供了下列優(yōu)點(diǎn):

  • Razor 的語法簡單且清晰,只需要最小化的輸入
  • Razor 容易學(xué)習(xí),語法類似于 C# 和 VB
  • Visual Studio 對于 Razor 提供了智能提示和語法著色
  • Razor 視圖不需要允許程序或者啟動(dòng) Web 服務(wù)器就可以進(jìn)行測試

Razor 現(xiàn)在提供了一些新的特征:

  • @model 用來指定傳到視圖的 Model 類型
  • @*? * 注釋語法
  • 對于整個(gè)站點(diǎn)可以一次性設(shè)定默認(rèn)項(xiàng)目,例如布局。
  • Html.Raw 方法提供了沒有進(jìn)行 HTML 編碼的輸出
  • 支持在多個(gè)視圖之間共享代碼 ( _viewstart.cshtml 或者 _viewstart.vbhtml )

Razor 還包含新的? HTML Helper,例如:

  • Chart. 生成圖表
  • WebGrid, 生成數(shù)據(jù)表格,支持完整的分頁和排序
  • Crypto,使用 Hash 算法來創(chuàng)建 Hash 和加鹽的口令
  • WebImage, 生成圖片
  • WebMail, 發(fā)送電子郵件

如下示例代碼:

@model List<MvcMusicStore.Models.Album>
@{
ViewBag.Title = "ASP.NET MVC Music Store";
}
<div id="promotion">
</div>

<h3><em>Fresh</em> off the grill</h3>

<ul id="album-list">
@foreach (var album in Model)
{
<li><a href="@Url.Action("Details", "Store",
new { id
= album.AlbumId })">

<img alt="@album.Title" src="@album.AlbumArtUrl" />
<span>@album.Title</span> </a>
</li>
}
</ul>

關(guān)于 Razor 更多的資料,可以參考下面的資源:

  • Scott Guthrie's blog post introducing Razor
  • Scott Guthrie's blog post introducing the @model keyword
  • Scott Guthrie's blog post introducing Razor layouts
  • Razor API Quick Reference
  • MVC 3 Release Notes

支持多視圖引擎

?在 ASP.NET MVC3 中,增加視圖的對話框中允許你選擇你希望的視圖引擎,在新建項(xiàng)目對話框中,你可以指定項(xiàng)目默認(rèn)的視圖引擎,可以選擇 WebForm,Razor,或者開源的視圖引擎,例如:Spark, NHaml,?或者 NDjango.

選擇視圖引擎:

?

?

控制器的改進(jìn)

?全局的 Action 過濾器

有的時(shí)候你希望能夠在在一個(gè) Action 方法執(zhí)行之前或者執(zhí)行之后執(zhí)行一些處理邏輯,在 ASP.NET MVC2 中,提供了 Action 過濾器,允許對特定控制器的 Action 方法進(jìn)行處理,實(shí)際上,有時(shí)候你希望對所有的 Action 都進(jìn)行類似的處理,MVC3 允許你將過濾器加入到 GlobalFilters 集合中來創(chuàng)建全局的過濾器,詳細(xì)的介紹,參考下列資源:

  • Scott Guthrie's blog on the MVC 3 Preview
  • Filtering in ASP.NET MVC

新的 ViewBag 屬性

MVC2 中的控制器支持 ViewData 屬性,允許通過后綁定的字典將數(shù)據(jù)傳送給視圖模板,在 MVC3 中,你可以通過 ViewBag 來更加簡單的完成。例如,對于 ViewData["Message"] = "text",你可以通過 ViewBag.Message = "text" 來完成。你不需要通過類來定義任何強(qiáng)類型的屬性,因?yàn)檫@是動(dòng)態(tài)屬性,在內(nèi)部,ViewBag 屬性以名-值對的形式保存在 ViewData 字典中。注意,在許多預(yù)發(fā)布版本中,這個(gè)屬性被稱為 ViewModel。

新的 ActionResult 類型

下面的 ActionResult 類型在 MVC3 中是新增的或者被擴(kuò)展的。

  • . 向客戶端返回 404 HTTP 狀態(tài). HttpNotFoundResult
  • . 基于一個(gè)布爾型的參數(shù),返回一個(gè)臨時(shí)的重定向 (HTTP 302 status code) 或者持久的重定向 (HTTP 301 status code),??結(jié)合這個(gè)改進(jìn),,? 提供了三個(gè)方法來支持持久的重定向: , , 和 . 這些方法返回一個(gè) ? 屬性為真的 對象實(shí)例。 RedirectResultControllerRedirectPermanentRedirectToRoutePermanentRedirectToActionPermanentPermanentRedirectResult
  • . 返回用戶指定的 HTTP 狀態(tài)碼。 HttpStatusCodeResult

JavaScript 和 Ajax 改進(jìn)

?默認(rèn)情況下,在 MVC3 中,Ajax 和驗(yàn)證使用不引人注目的 unobtrusive? 的 JavaScript 方式。unobtrusive? 不會(huì)在 HTML 中插入行內(nèi)的 JavaScript ,這使得 HTML 更加精簡和更少干擾,也使得更加容易被替換和定制 JavaScript 庫,在 MVC3 中,驗(yàn)證助手默認(rèn)使用 jQuery.Validate 插件完成,如果你希望使用 MVC2 的行為,你可以在 web.config 中通過配置來關(guān)閉 unobtrusive?,更多的信息參考下列資源:

  • Basic introduction to unobtrusive JavaScript on the Wikipedia site
  • Brad Wilson's Unobtrusive JavaScript Post
  • Brad Wilson's Unobtrusive JavaScript Validation Post
  • (tutorial on the ASP.NET site) Creating a MVC 3 Application with Razor and Unobtrusive JavaScript
  • MVC 3 Release Notes

默認(rèn)啟用了客戶端驗(yàn)證

?在早先版本的 MVC 中,你需要在視圖中顯式調(diào)用 Html.EnableClientValidation 方法來啟用客戶端驗(yàn)證。在 MVC3 中,已經(jīng)不再需要了,因?yàn)槟J(rèn)就會(huì)啟用客戶端驗(yàn)證。可以在 web.config 中關(guān)閉。

為了使得客戶端驗(yàn)證工作,你仍然需要在網(wǎng)站中加入對 jQuery 和 jQuery.Validation 庫的引用,你可以在自己的網(wǎng)站中提供,或者使用 Microsoft 或者 Google 的 CDN 服務(wù)器。

遠(yuǎn)程驗(yàn)證

ASP.NET 3 通過一個(gè)新的標(biāo)簽 RemoteAttribute 對 jQuery Validation 插件的遠(yuǎn)程驗(yàn)證提供支持。這允許客戶端的驗(yàn)證庫自動(dòng)調(diào)用一個(gè)你定義在服務(wù)器上的自定義的方法來完成只能在服務(wù)器上完成的驗(yàn)證邏輯。

在下面的例子中,Remote 標(biāo)簽指定了通過一個(gè)定義在 UsersController 中名為 UserNameAvailable 的方法來驗(yàn)證用戶名字段。

public?class?User??
{?
????[Remote(
"UserNameAvailable",?"Users")]?
????
public?string?UserName?{?get;?set;?}?
}

?

下面的代碼定義在控制器中

public?class?UsersController??
{??
????
public?bool?UserNameAvailable(string?username)??
????{??
????????
if(MyRepository.UserNameExists(username))??
????????{??
????????????
return?"false";??
????????}??
????????
return?"true";??
????}??
}

?

關(guān)于 Remote 屬性的更多資源,參考 ?How to: Implement Remote Validation in ASP.NET MVC

JSON 綁定支持

ASP.NET MVC3 包含內(nèi)置的 JSON 綁定支持,允許 Action 方法接收 JSON 編碼的數(shù)據(jù)并且模型化為 Action 的參數(shù)。這個(gè)能力經(jīng)常被用于客戶端的模板和數(shù)據(jù)綁定中。客戶端模板允許你通過客戶端的模板來格式化和顯示一個(gè)或者多個(gè)數(shù)據(jù),MVC3 允許你簡單的連接客戶端模板和服務(wù)器端的 Action 方法,通過 JSON 來發(fā)送和接收數(shù)據(jù),更多的信息參考:Scott Guthrie's MVC 3 Preview blog post.

?

Model 驗(yàn)證的改進(jìn)

DataAnnotations 元數(shù)據(jù)標(biāo)簽

ASP.NET MVC3 支持 DataAnnotations 元數(shù)據(jù)標(biāo)簽,例如:DisplayAttribute。

ValidationAttribute 類

在 .NET Framework4 中被改進(jìn) 的ValidationAttribute 類支持新的 IsValid 重載,提供關(guān)于當(dāng)前驗(yàn)證上下文的更多信息,例如什么對象被驗(yàn)證了。這允許你基于 Model 的其他屬性來驗(yàn)證當(dāng)前值,例如,新的 CompareAttribute 就允許你比較 Model 的兩個(gè)屬性的值,在下面的例子中,ComparePassword 屬性必須匹配 Password 字段來同通過驗(yàn)證。

public?class?User?
{??
????[Required]?
????
public?string?Password?{?get;?set;?}??
????[Required,?Compare(
"Password")]??
????
public?string?ComparePassword?{?get;?set;?}??
}

?

驗(yàn)證接口

IValidatableObject 接口允許執(zhí)行 Model 水平的驗(yàn)證,并且允許你提供整個(gè)模型狀態(tài)的驗(yàn)證錯(cuò)誤信息,或者基于 Model 的兩個(gè)屬性。當(dāng) Model 綁定的時(shí)候,MVC3 從 IValidatableObject 接收錯(cuò)誤信息,在視圖中使用內(nèi)建的 HTML 助手時(shí),將會(huì)自動(dòng)標(biāo)識(shí)或者高亮受影響的字段。

IClientValidatable 接口允許 ASP.NET MVC 在運(yùn)行時(shí)發(fā)現(xiàn)支持的客戶端驗(yàn)證器,這個(gè)接口被用來支持集成不同的驗(yàn)證框架。

更加關(guān)于驗(yàn)證接口的內(nèi)容,參考 Scott Guthrie's MVC 3 Preview blog post?中 Model Validation Improvements 一節(jié)。

依賴注入Dependency Injection 的改進(jìn)

ASP.NET MVC3 提供了更好的 DI 和 IoC?支持,在下面的地方支持 DI:

  • 控制器 (registering and injecting controller factories, injecting controllers).
  • 視圖 (registering and injecting view engines, injecting dependencies into view pages).
  • Action 過濾器 (locating and injecting filters).
  • Model 綁定器 (registering and injecting).
  • Model 驗(yàn)證提供器 (registering and injecting).
  • Model 元數(shù)據(jù)提供器 (registering and injecting).
  • Value 提供器 (registering and injecting).

MVC3 支持 ?Common Service Locator?庫和任何支持這個(gè)庫的 IServiceLocator?接口的 DI 容器。也支持新的容易集成到 DI 框架的?IDependencyResolver? 接口。

更多關(guān)于 DI 的信息,參考:

  • Brad Wilson's series of blog posts on Service Location
  • MVC 3 Release Notes

?

其他新特性

?NuGet 集成

ASP.NET MVC3 自動(dòng)安裝和啟用 NuGet ,NUGet 是免費(fèi)開源的一個(gè)包管理器,使得在你的項(xiàng)目中容易發(fā)現(xiàn),安裝,和使用?.NET 庫。它可以和所有的 Visual Studio 項(xiàng)目類型一起工作,包括 ASP.NET WebForm 和 MVC。

NuGet 允許開發(fā)者維護(hù)開源項(xiàng)目,例如,像 Moq 項(xiàng)目,NHibernate 等等,可以注冊它們到一個(gè)在線的網(wǎng)站中。

更多信息參考:NuGet documentation on the CodePlex site.

部分頁的輸出緩存

ASP.NET MVC 從版本1 開始支持整頁緩存,MVC3 還提供了部分頁緩存。這可以允許你容易地緩存輸出的一個(gè)區(qū)域或者片斷,更多地內(nèi)容參考 ?Scott Guthrie's blog post on the MVC 3 release candidate? 中?Partial Page Output Caching?段落,還有?MVC 3 Release Notes?中 Child Action Output Caching 段落。

在請求驗(yàn)證中的粒度控制

ASP.NET MVC 內(nèi)建了請求驗(yàn)證機(jī)制來自動(dòng)幫助處理類似跨站攻擊和 HTML 注入等等。實(shí)際上,有時(shí)你希望能夠顯式關(guān)閉請求的驗(yàn)證,例如你希望允許用戶提交 HTML 內(nèi)容,例如在內(nèi)容管理系統(tǒng)中,現(xiàn)在你可以通過增加 AllowHtml 標(biāo)簽到 Model 或者視圖的 Model 來支持在綁定的時(shí)候基于一個(gè)屬性關(guān)閉請求驗(yàn)證。更多地資料參考:

  • ??中 一節(jié). Scott Guthrie's blog post on the MVC 3 release candidateUnobtrusive JavaScript and Validation
  • MVC 3 Release Notes

可擴(kuò)展的新建項(xiàng)目對話框

在 MVC3 中,你可以增加項(xiàng)目模板,視圖引擎,單元測試項(xiàng)目框架到新建項(xiàng)目對話框中。

腳手架的改進(jìn)

MVC3 中的腳手架對于主鍵提供了更好的支持,例如,腳手架的模板不會(huì)將主鍵加入的編輯表單中了。

默認(rèn)情況下,創(chuàng)建和編輯的腳手架現(xiàn)在使用 Html.EditorFor 助手來替代 Html.TextBoxFor 助手,這個(gè)改進(jìn)在增加視圖對話框生成一個(gè)視圖的時(shí)候,支持模型中的元數(shù)據(jù)標(biāo)簽。

對于 Html.LabelFor 和 Html.LabelForModel 的新重載

對于 LabelFor 和 LabelForModel 增加了新的方法重載,允許指定或者重寫 Label 文本。

無 Session 的控制器支持

MVC3 中可以指定控制器是否使用 Session 狀態(tài),進(jìn)而,Session 是否是讀寫還是只讀。

新的 AdditionalMetadataAttribute 類

可以通過 AdditionalMetadataAttribute 標(biāo)簽對 Model 的一個(gè)屬性訪問 ModelMetadata.AdditionalValues 字典,例如,如果模型的某個(gè)屬性僅僅支持管理員顯示,你可以如下設(shè)置:

public?class?ProductViewModel??
{?
????[AdditionalMetadata(
"AdminOnly",?true)]?
????
public?string?RefundCode?{get;?set;}?
}

?

當(dāng)使用產(chǎn)品的 Model 來生成的時(shí)候,這個(gè)元數(shù)據(jù)將被任何顯示或者編輯模板使用,這允許你來解釋元數(shù)據(jù)信息。


作者:記憶逝去的青春
出處:http://www.cnblogs.com/lukun/
原文出處:http://www.asp.net/mvc/mvc3

轉(zhuǎn)載于:https://www.cnblogs.com/lukun/archive/2011/07/19/2110728.html

總結(jié)

以上是生活随笔為你收集整理的我要学ASP.NET MVC 3.0(一): MVC 3.0 的新特性的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。