關於TagHelper的那些事情——TagHelper的基本知識


概要

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,我們可以參照一下幾步:

  1. 在project.json文件中添加具有TagHelpers的package的依賴;
  2. 在所用的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了。

  3. 在View中需要使用的地方添加TagHelper,比如我們添加一個AnchorTagHelper:
    <a asp-controller="Home" asp-action="About">About</a> 

寫在本文的結尾

以上介紹了TagHelper的一些基本知識,這是知識是基於ASP.NET5 beta4的,ASP.NET5還在開發之中,現在已經發布了beta5,有些東西也是一直在變化,所以可能上面寫到的某些方法名,程序集名在新的版本都發生了變化,這一點需要注意。

接下來我會介紹關於微軟已經給我們提供的一些TagHelpers和如何開發自己的TagHelper。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM