解讀ASP.NET 5 & MVC6系列教程(1):ASP.NET 5簡(jiǎn)介
ASP.NET 5簡(jiǎn)介
ASP.NET 5是一個(gè)跨時(shí)代的改寫(xiě),所有的功能和模塊都進(jìn)行了獨(dú)立拆分,做到了徹底解耦。為了這些改寫(xiě),微軟也是蠻 拼的,幾乎把.NET Framwrok全部改寫(xiě)了一遍,形成了一個(gè).NET Core的東西。 在.NET Core里一切都是可配置的,包括Session、MVC等功能,而一切可配置的功能都是可以在Nuget上進(jìn)行下載。
目前ASP.NET 5依舊兼容老的.NET Framwrok,但要在進(jìn)行跨平臺(tái)的部署,還是只能使用新改版的.NET Core CLR。
目前的ASP.NET 5包括6個(gè)子項(xiàng)目DependencyInjection、EntityFramework、Identity、KRuntime、MVC、SignalR Server,具體每個(gè)項(xiàng)目的介紹如下:
DependencyInjection - 基本的依賴(lài)注入管理并擁有默認(rèn)實(shí)現(xiàn)
EntityFramework - 數(shù)據(jù)訪問(wèn)ORM框架
Identity - 用戶(hù)認(rèn)證系統(tǒng)
KRuntime - 核心運(yùn)行時(shí)、項(xiàng)目系統(tǒng),加載器
MVC - MVC框架,整合了MVC、Web API、Web Pages功能
SignalR-Server - 實(shí)時(shí)交互式服務(wù)
ASP.NET 5所有子項(xiàng)目的開(kāi)源代碼都可以在https://github.com/aspnet/上找到。
ASP.NET 版本號(hào)解釋
5
新版的ASP.NET稱(chēng)為ASP.NET 5,是一個(gè)使用MVC架構(gòu)開(kāi)發(fā)web應(yīng)用程序的框架,它還提供了開(kāi)發(fā)RESTful服務(wù)的功能。另外,在下個(gè)版本里,該框架還可以使用SignalR構(gòu)建實(shí)時(shí)應(yīng)用程序。注意,ASP.NET 5不再包含Web Form開(kāi)發(fā)框架了。
5也是.NET framework的新版本的版本號(hào),稱(chēng)之為Core50,也叫.NET Core。.NET Core是.NET的重構(gòu)版本,只保留原有框架中的最小化的功能集,對(duì)于其它的特性和功能,可以通過(guò)nuget下載以插件的形式運(yùn)行。這就意味著,我們可以將其用于各種云環(huán)境進(jìn)行獨(dú)立部署。另外,微軟還會(huì)提供一個(gè)跨平臺(tái)的.NET Core,以便可以讓ASP.NET程序部署到Mac和Unix/Liunx服務(wù)器上。另外.NET Core框架還可以和程序一起進(jìn)行打包部署,從而可以實(shí)現(xiàn)在同一臺(tái)服務(wù)器上使用不同版本的.NET Core。
另外,還要注意,.NET Core不包括Web Form、Windows Form、WPF、WCF、Silverlight、System.Drawing、Datatable等功能。也就是說(shuō),如果你的程序需要使用System.Drawing進(jìn)行縮略圖制作的話,那就沒(méi)辦法使用了。類(lèi)似的工具集只能通過(guò)Nuget包進(jìn)行下載了??梢酝ㄟ^(guò)工具查找當(dāng)前程序和.NET Core的兼容性工具集。
4.5.2
4.5.2是當(dāng)前.NET framework全功能版的版本號(hào)。你可以使用該版本的.NET來(lái)運(yùn)行ASP.NET 5,甚至是4.5.1版本,使用該版本,可以使用整個(gè).NET體系的所有功能,只不過(guò)就不能跨平臺(tái)了。
4.6
4.6是.NET framework全功能版下一版的版本號(hào),也是.NET Core的下一個(gè)版本號(hào)。你可以將ASP.NET 5應(yīng)用程序運(yùn)行在.NET 4.6上,但運(yùn)行在.NET 4.6上的ASP.NET程序可能不兼容.NET Core。下一個(gè)版本的ASP.NET Web Forms也是4.6,其將包括一些增強(qiáng)功能,如異步模型綁定、HTTP2、并開(kāi)始使用Roselyn編譯器?,F(xiàn)有的ASP.NET程序(Web Forms、MVC5和之前的版本、Web Pages)不需要任何修改都可以運(yùn)行在.NET 4.6上。
6
ASP.NET 5中的MVC、Web API、Web Pages三個(gè)框架會(huì)合并成一個(gè)框架,統(tǒng)稱(chēng)為MVC6。該合并工作將刪除三個(gè)框架中重復(fù)的功能,比如MVC和Web API中的兩種Controller只保留一種。但是傳統(tǒng)MVC的功能都會(huì)保留,比如模型綁定。不過(guò),據(jù)說(shuō)Web Pages在RTM的時(shí)候不會(huì)發(fā)布,而是會(huì)在RTM之后的第一次更新中進(jìn)行發(fā)布。
MVC6會(huì)引入一些新功能,最引人注目的功能就是Tag Helpers和View Components。Tag Helpers是Html Helpers的一種替換,而View Components則引入里類(lèi)似Web Forms中的WebControl的概念。
比如,原來(lái)的視圖模型定義是這樣的:
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { @Html.AntiForgeryToken() <h4>Create a new account.</h4> <hr /> @Html.ValidationSummary(true, "", new { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(m => m.UserName, new { @class = "col-md-2 control-label" }) <div class="col-md-10"> @Html.TextBoxFor(m => m.UserName, new { @class = "form-control" }) </div> </div>
在新版MVC6中,我們可以使用Tag Helper進(jìn)行定義:
<form asp-controller="Account" asp-action="Register" method="post" class="form-horizontal" role="form"> <h4>Create a new account.</h4> <hr /> <div asp-validation-summary="ValidationSummary.ModelOnly" class="text-danger"></div> <div class="form-group"> <label asp-for="UserName" class="col-md-2 control-label"></label> <div class="col-md-10"> <input asp-for="UserName" class="form-control" /> <span asp-validation-for="UserName" class="text-danger"></span> </div> </div>
這樣的話,就極大地方便了前端開(kāi)發(fā)人員了,因?yàn)榭梢钥吹秸5腍TML結(jié)構(gòu)了。
View Components則解決了Child Action的問(wèn)題,比如很多時(shí)候,我們都是通過(guò)Html.Action來(lái)實(shí)現(xiàn)菜單、標(biāo)簽功能。如下是一個(gè)View Component的示例:
public class GreetingViewComponent : ViewComponent { public IViewComponentResult Invoke() { var greeting = "Good Morning!"; if (DateTime.Now.Hour > 12) { greeting = "Good Afternoon!"; } if (DateTime.Now.Hour > 17) { greeting = "Good Evening!"; } return View("Index", greeting); } }
該視圖組件(view component)也需要響應(yīng)的視圖文件,示例如下:
@model string <h3>@Model</h3>
調(diào)用代碼則需要使用權(quán)限的Component.Invoke方法,示例如下:
<div> @Component.Invoke("Greeting") </div>
另外還有一個(gè)Component.InvokeAsync方法,可以用于異步調(diào)用。關(guān)于視圖組件的詳細(xì)用法,請(qǐng)參考視圖組件一章。
7
7是Entity Framework的下一個(gè)版本,雖然不屬于ASP.NET 5的一部分,但有很大關(guān)系。EF7將和ASP.NET 5的RTM版本一起發(fā)布,雖然可能延期,但至少在那個(gè)時(shí)候會(huì)有一個(gè)可以在.NET Core上運(yùn)行的基本ORM包,其不包括延遲加載、繼承映射、并且只適應(yīng)于SQL Server。如果不在跨平臺(tái)上運(yùn)行MVC6程序的話,你可以在.NET 4.5.2或4.6中繼續(xù)使用EF6,
ASP.NET5和MVC6中的10大新變化
在新版ASP.NET5和MVC6中,有很多變化,有些是徹底的變化,比如在最底層支持依賴(lài)注入技術(shù),為了方便了解,我們這里列出了最重要的10大變化,以便進(jìn)行學(xué)習(xí),具體如下:
ASP.NET 5現(xiàn)在已經(jīng)是跨平臺(tái)了,可以在Mac和Linux上運(yùn)行。
不再有Web Forms框架了。
只支持C#,不在支持VB.NET了。(貌似最近又聽(tīng)說(shuō)最終版VB.NET又要支持了)
新的Tag語(yǔ)法,@Html.LabelFor或Html.TextBoxFor替換成新語(yǔ)法<label asp-for="Name">或<input asp-for="Name" />,以便進(jìn)行模型綁定。
新增視圖組件(View Component),可以將局部?jī)?nèi)容定義為一個(gè)單獨(dú)的組件進(jìn)行調(diào)用,和Web Forms里的WebControl非常像。
擁抱前端技術(shù),內(nèi)置了Nodejs、NPM、Grunt、Bower技術(shù)。
模型整合,將MVC和WebAPI整合成一個(gè)框架。
支持AngularJS,幫內(nèi)置了AngularJS的module、controller、directive、以及factory模板。
支持依賴(lài)注入技術(shù),擁有原生的DI框架,并且也支持第三方容器。
支持xUnit.net,并拋棄了Visual Studio Unit Testing框架。
IDE
VS2015:VS2015就不用說(shuō)了,依然高大上,目前不僅支持Nodejs、Python開(kāi)發(fā),還支持Android和iOS開(kāi)發(fā)。
Visual Studio Code:為了能夠在Mac或Linux操作系統(tǒng)上也能編寫(xiě)C#程序,微軟又發(fā)布了一個(gè) Visual Studio Code輕量級(jí)編輯器可以使用上述操作系統(tǒng),依然是高大上啊,新功能和特性瞬間秒殺Sublime Text和Brackets,詳細(xì)地址請(qǐng)?jiān)L問(wèn):https://code.visualstudio.com/ 。
參考:http://stephenwalther.com/archive/2015/02/24/top-10-changes-in-asp-net-5-and-mvc-6
相關(guān)文章
在ASP.NET 2.0中操作數(shù)據(jù)之五十:為GridView控件添加Checkbox
本文主要介紹ASP.NET 2.0中為GridView控件添加Checkbox復(fù)選框控件的方法,并實(shí)現(xiàn)全選功能。2016-05-05在ASP.NET 2.0中操作數(shù)據(jù)之五:聲明參數(shù)
為了使用帶輸入?yún)?shù)的方法,我們需要在ObjectDataSource的SelectParameters集合里指定參數(shù)的值。本文主要介紹使用一個(gè)硬編碼參數(shù)值的方法,和使用設(shè)置Web控件的屬性作為參數(shù)源的方法。2016-04-04如何在DataGrid控件中實(shí)現(xiàn)自定義分頁(yè)
如何在DataGrid控件中實(shí)現(xiàn)自定義分頁(yè)...2006-10-10在ASP.NET 2.0中操作數(shù)據(jù)之六十一:在事務(wù)里對(duì)數(shù)據(jù)庫(kù)修改進(jìn)行封裝
事務(wù)的最主要的一個(gè)作用就是保證數(shù)據(jù)的完整性,本文主要介紹ASP.NET 2.0中使用事務(wù)對(duì)修改數(shù)據(jù)進(jìn)行封裝,這些包含事務(wù)的命令要么都執(zhí)行成功要么都執(zhí)行失敗。2016-05-05在ASP.NET 2.0中操作數(shù)據(jù)之二十九:用DataList和Repeater來(lái)顯示數(shù)據(jù)
本文主要講解ASP.NET 2.0中如何使用DataList 和 Repeater 來(lái)呈現(xiàn)數(shù)據(jù),DataList包含一個(gè)table標(biāo)記,而Repeater不會(huì)添加任何額外的代碼,個(gè)人在實(shí)際開(kāi)發(fā)中更推薦使用Repeater。2016-05-05ASP.NET MVC4入門(mén)教程(二):添加一個(gè)控制器
本文對(duì)MVC模式(模型-視圖-控制器)做了簡(jiǎn)單的介紹,并演示如何添加一個(gè)控制器。2016-04-04在ASP.NET 2.0中操作數(shù)據(jù)之四十二:DataList和Repeater數(shù)據(jù)排序(一)
本文主要介紹利用ObjectDataSource的Selecting事件進(jìn)行DataList和Repeater數(shù)據(jù)排序的方法,DropDownList隱式的為我們將sort expression 和 direction保存在它的view state里,進(jìn)行分頁(yè)時(shí)從view state中取出條件進(jìn)行排序。2016-05-05在ASP.NET 2.0中操作數(shù)據(jù)之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
前面介紹搭建基礎(chǔ)的架構(gòu),下面我們來(lái)介紹ASP.NET中,如何利用ObjectDataSource來(lái)展現(xiàn)數(shù)據(jù)。通過(guò)配置ObjectDataSource,我們指定這些底層的對(duì)象,還有這些對(duì)象的方法如何映射到ObjectDataSource的Select、Insert、Update和Delete方法。2016-04-04我今天開(kāi)始正式學(xué)習(xí).net遇到的問(wèn)題
我今天開(kāi)始正式學(xué)習(xí).net遇到的問(wèn)題...2006-10-10