概要
TagHelper是ASP.NET 5的一個新特性。也許在你還沒有聽說過它的時候, 它已經在技術人員之間引起了大量討論,甚至有一部分稱它為服務器控件的回歸。實際上它只不過是一個簡化版本,把HTML和服務器內容混合在一起,沒有控件生命周期,狀態保持和事件。它不像服務器控件那樣,對頁面所有內容都具有訪問權限。它只能訪問到自己所生成的內容。
什么是TagHelper?
我們曾經在MVC項目中使用在HtmlHelps。比如當需要在View上添加一個導航欄的時候,我們就會添加下面代碼到頁面上去:
<ol> … <li>@Html.ActionLink("Home", "Index", "Home")<li> … </ol>
這里有一些HTML元素。還有以@開頭的一些C#代碼,當View解析的時候這些C#代碼會被解析成HTML元素。
當我們用TagHelper,我們同樣可以用下面的代碼來獲得上面同樣的效果:
<ol> … <li><a controller="Home" action="Index">Home</a></li> … </ol>
在這里,A元素的屬性controller和action並不是HTML5的屬性,而是這個TagHelper的屬性。
這里需要着重申明一點是,雖然TagHelper看起來有點像我們之前服務器控件的寫法,但是它不是服務器控件的再次回歸。它更像是給用戶一個簡潔的方式來表達用戶的意向。它本身並沒有生命周期之類的東西。它會預處理服務器內容,然后賦值給相應的屬性。我們來看一下關於微軟提供的SelectTagHelper的一個用法:
<select asp-for="Country" asp-items="ViewBag.Countries">
其中文本“Country”被賦給asp-for屬性,變量ViewBag.Countries被賦給屬性asp-items.
怎么使用TagHelpers?
關於如何使用TagHelpers,我們可以參照一下幾步:
- 在project.json文件中添加具有TagHelpers的package的依賴;
- 在所用的View上注冊TagHelper:
@addTagHelper “[the full type name of taghelper,] the assembly name”
第一參數是TagHelper類的全名,當你只需要使用某一個TagHelper時候,你可以在此指定你所用的TagHelper類全名,包括它的NameSpace。如果你要使用程序集中所有的TagHelpers,在這里你可以使用“*”或者省略這一個參數。舉個例子,如果你需要使用微軟提供的TagHelpers可以通過添加下面的代碼在注冊:
@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
或者
@addTagHelper "Microsoft.AspNet.Mvc.TagHelpers"
如果你只希望使用AnchorTagHelper,那么只需要一下代碼:
@addTagHelper "Microsoft.AspNet.Mvc.TagHelpers.AnchorTagHelper, Microsoft.AspNet.Mvc.TagHelpers"
第二個參數是程序集名。
當然,如果你想取消某個TagHelper的注冊,可以使用removeTagHelper,比如@removeTagHelper "Microsoft.AspNet.Mvc.TagHelpers.AnchorTagHelper, Microsoft.AspNet.Mvc.TagHelpers"
一旦TagHelper被取消注冊了,其對應的Tag就不能被解析成這種TagHelper了。
- 在View中需要使用的地方添加TagHelper,比如我們添加一個AnchorTagHelper:
<a asp-controller="Home" asp-action="About">About</a>
寫在本文的結尾
以上介紹了TagHelper的一些基本知識,這是知識是基於ASP.NET5 beta4的,ASP.NET5還在開發之中,現在已經發布了beta5,有些東西也是一直在變化,所以可能上面寫到的某些方法名,程序集名在新的版本都發生了變化,這一點需要注意。
接下來我會介紹關於微軟已經給我們提供的一些TagHelpers和如何開發自己的TagHelper。