天天看點

解讀ASP.NET 5 & MVC6系列(1):ASP.NET 5簡介

解讀ASP.NET 5 & MVC6系列(1):ASP.NET 5簡介

2015-05-13 09:14 by 湯姆大叔, 21513 閱讀, 57 評論, 收藏, 編輯

ASP.NET 5簡介

ASP.NET 5是一個跨時代的改寫,所有的功能和子產品都進行了獨立拆分,做到了徹底解耦。為了這些改寫,微軟也是蠻 拼的,幾乎把.NET Framwrok全部改寫了一遍,形成了一個.NET Core的東西。 在.NET Core裡一切都是可配置的,包括Session、MVC等功能,而一切可配置的功能都是可以在Nuget上進行下載下傳。

目前ASP.NET 5依舊相容老的.NET Framwrok,但要在進行跨平台的部署,還是隻能使用新改版的.NET Core CLR。

目前的ASP.NET 5包括6個子項目DependencyInjection、EntityFramework、Identity、KRuntime、MVC、SignalR Server,具體每個項目的介紹如下:

  1. DependencyInjection - 基本的依賴注入管理并擁有預設實作
  2. EntityFramework - 資料通路ORM架構
  3. Identity - 使用者認證系統
  4. KRuntime - 核心運作時、項目系統,加載器
  5. MVC - MVC架構,整合了MVC、Web API、Web Pages功能
  6. SignalR-Server - 實時互動式服務

ASP.NET 5所有子項目的開源代碼都可以在

https://github.com/aspnet/

上找到。

ASP.NET 版本号解釋

5

新版的ASP.NET稱為ASP.NET 5,是一個使用MVC架構開發web應用程式的架構,它還提供了開發RESTful服務的功能。另外,在下個版本裡,該架構還可以使用SignalR建構實時應用程式。注意,ASP.NET 5不再包含Web Form開發架構了。

5也是.NET framework的新版本的版本号,稱之為

Core50

,也叫

.NET Core

。.NET Core是.NET的重構版本,隻保留原有架構中的最小化的功能集,對于其它的特性和功能,可以通過nuget下載下傳以插件的形式運作。這就意味着,我們可以将其用于各種雲環境進行獨立部署。另外,微軟還會提供一個跨平台的

.NET Core

,以便可以讓ASP.NET程式部署到Mac和Unix/Liunx伺服器上。另外

.NET Core

架構還可以和程式一起進行打包部署,進而可以實作在同一台伺服器上使用不同版本的

.NET Core

另外,還要注意,

.NET Core

不包括Web Form、Windows Form、WPF、WCF、Silverlight、System.Drawing、Datatable等功能。也就是說,如果你的程式需要使用System.Drawing進行縮略圖制作的話,那就沒辦法使用了。類似的工具集隻能通過Nuget包進行下載下傳了。可以通過工具查找目前程式和

.NET Core

的相容性工具集。

4.5.2

4.5.2是目前.NET framework全功能版的版本号。你可以使用該版本的.NET來運作ASP.NET 5,甚至是4.5.1版本,使用該版本,可以使用整個.NET體系的所有功能,隻不過就不能跨平台了。

4.6

4.6是.NET framework全功能版下一版的版本号,也是.NET Core的下一個版本号。你可以将ASP.NET 5應用程式運作在.NET 4.6上,但運作在.NET 4.6上的ASP.NET程式可能不相容.NET Core。下一個版本的ASP.NET Web Forms也是4.6,其将包括一些增強功能,如異步模型綁定、HTTP2、并開始使用Roselyn編譯器。現有的ASP.NET程式(Web Forms、MVC5和之前的版本、Web Pages)不需要任何修改都可以運作在.NET 4.6上。

6

ASP.NET 5中的MVC、Web API、Web Pages三個架構會合并成一個架構,統稱為MVC6。該合并工作将删除三個架構中重複的功能,比如MVC和Web API中的兩種Controller隻保留一種。但是傳統MVC的功能都會保留,比如模型綁定。不過,據說Web Pages在RTM的時候不會釋出,而是會在RTM之後的第一次更新中進行釋出。

MVC6會引入一些新功能,最引人注目的功能就是Tag Helpers和View Components。Tag Helpers是Html Helpers的一種替換,而View Components則引入裡類似Web Forms中的WebControl的概念。

比如,原來的視圖模型定義是這樣的:

@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進行定義:

<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>           

這樣的話,就極大地友善了前端開發人員了,因為可以看到正常的HTML結構了。

View Components則解決了Child Action的問題,比如很多時候,我們都是通過

Html.Action

來實作菜單、标簽功能。如下是一個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)也需要響應的視圖檔案,示例如下:

@model string
<h3>@Model</h3>           

調用代碼則需要使用權限的Component.Invoke方法,示例如下:

<div>
    @Component.Invoke("Greeting")
</div>           

另外還有一個Component.InvokeAsync方法,可以用于異步調用。關于視圖元件的詳細用法,請參考視圖元件一章。

7

ASP.NET5和MVC6中的10大新變化

  1. ASP.NET 5現在已經是跨平台了,可以在Mac和Linux上運作。
  2. 不再有Web Forms架構了。
  3. 隻支援C#,不在支援VB.NET了。(貌似最近又聽說最終版VB.NET又要支援了)
  4. 新的Tag文法,@Html.LabelFor或Html.TextBoxFor替換成新文法

    <label asp-for="Name">

    <input asp-for="Name" />

    ,以便進行模型綁定。
  5. 新增視圖元件(View Component),可以将局部内容定義為一個單獨的元件進行調用,和Web Forms裡的WebControl非常像。
  6. 擁抱前端技術,内置了Nodejs、NPM、Grunt、Bower技術。
  7. 模型整合,将MVC和WebAPI整合成一個架構。
  8. 支援AngularJS,幫内置了AngularJS的module、controller、directive、以及factory模闆。
  9. 支援依賴注入技術,擁有原生的DI架構,并且也支援第三方容器。
  10. 支援xUnit.net,并抛棄了Visual Studio Unit Testing架構。

IDE

繼續閱讀