asp.net core razor自定義taghelper的方法
又一個新的名詞(taghelper),通過taghelper是可以操作html標(biāo)簽、條件輸出、更是自由添加內(nèi)外元素。當(dāng)然也內(nèi)置了挺多的asp-開頭的taghelper。
下面文章中也簡單的帶大家實(shí)現(xiàn)一個taghelper;
創(chuàng)建自定義html元素
創(chuàng)建一個類ButtonTagHelper
tagName為標(biāo)簽名稱,下面創(chuàng)建一個button標(biāo)簽
using Microsoft.AspNetCore.Razor.TagHelpers; namespace Ctrl.Core.Tag.Controls.Button { [HtmlTargetElement("test-button")] public class ButtonTagHelper:TagHelper { public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "button"; base.Process(context, output); } } }
注冊taghelper
創(chuàng)建完后可沒法執(zhí)行使用哦,在.cshtml通過某個標(biāo)簽比如form標(biāo)簽輸入asp-,下面立刻就出現(xiàn)了一個列表 asp-.... ,這些是怎么做到的呢?因?yàn)樵赺ViewImports在我們創(chuàng)建項(xiàng)目工程時,已經(jīng)提前引入了taghelper默認(rèn)引入的是微軟已經(jīng)為我們寫好的taghelper類庫Microsoft.AspNetCore.Mvc.TagHelpers;
我們自定義的話也需要按照這個方式引入自定義的taghelper,下面我自己創(chuàng)建了一個類庫名字為"Ctrl.Core.Tag",我這個類庫下面要存放所有的taghelper 我直接引入命名空間
@addTagHelper *,Ctrl.Core.Tag
如果想引入特定的taghelper如下
@addTagHelper 你的TagHelper , 命名空間
然后我們測試一下是否可用了,先生成一下項(xiàng)目,然后找個cshtml視圖,輸入剛才的前綴test會出來剛才定義的標(biāo)簽
添加上并運(yùn)行項(xiàng)目查看剛才創(chuàng)建的button標(biāo)簽是否存在
添加自定義屬性
上面需求是滿足不了我們?nèi)粘P枨蟮?下面我們再定義一個元素屬性
output.Attributes.SetAttribute("class", "btn btn-primary");
然后再打開頁面看效果就會看到class元素已經(jīng)給加上了.
using Microsoft.AspNetCore.Razor.TagHelpers; namespace Ctrl.Core.Tag.Controls.Button { [HtmlTargetElement("test-button")] public class ButtonTagHelper:TagHelper { public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "button"; output.Attributes.SetAttribute("class", "btn btn-primary"); base.Process(context, output); } } }
通過vs感知匹配按鈕類型
上面能滿足我們自定義標(biāo)簽了,但是可能使用起來有局限性,下面我給大家提供一個場景思路,后面大家可以自己進(jìn)行擴(kuò)展.
我創(chuàng)建一個枚舉類為 CtrlButtonType
namespace Ctrl.Core.Tag.Controls.Button { /// <summary> /// 按鈕類型 /// </summary> public enum CtrlButtonType { /// <summary> /// 默認(rèn)樣式 /// </summary> Default, /// <summary> /// 首選項(xiàng) /// </summary> Primary, /// <summary> /// 成功 /// </summary> Success, /// <summary> /// 一般信息 /// </summary> Info, /// <summary> /// 警告 /// </summary> Warning, /// <summary> /// 危險(xiǎn) /// </summary> Danger } }
在buttonTagHelper類中增加一個屬性
public CtrlButtonType ButtonType { get; set; }
到cshtml中添加剛才那個頁面的屬性,會發(fā)現(xiàn)有提示,以及可以看到剛才枚舉中定義的.這樣通過vs感知以及通過類型指定我們剛才按鈕的類型是不是很方面了.
namespace Ctrl.Core.Tag.Controls.Button { [HtmlTargetElement("test-button")] public class ButtonTagHelper:TagHelper { public CtrlButtonType ButtonType { get; set; } public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "button"; output.Attributes.SetAttribute("class", "btn btn-"+ButtonType.ToString().ToLower()); base.Process(context, output); } } }
<test-button button-type="Success"></test-button>
總結(jié)
以上所述是小編給大家介紹的asp.net core razor自定義taghelper,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
asp.net中CSharpThinking擴(kuò)展方法分析
這篇文章主要介紹了asp.net中CSharpThinking擴(kuò)展方法,實(shí)例講述了擴(kuò)展方法的特征及應(yīng)用,具有一定的參考借鑒價值,需要的朋友可以參考下2014-11-11asp.ent下合并兩個結(jié)構(gòu)相同的DataTable
今天遇到了一個情況,就是從一張數(shù)據(jù)表中讀取幾個符合條件1的客戶的信息,然后再讀取幾個符合條件2的客戶的信息,最后顯示出來.因?yàn)榍昂髢纱螖?shù)據(jù)的客戶信息的結(jié)構(gòu)是完全相同的,所以干脆合并成一個DataTable再賦值給GridView好了.2010-02-02使用CustomValidator自定義驗(yàn)證控件檢查是否有對ListBox控件選擇
在網(wǎng)頁前端處,我們放置ListBox控件,在數(shù)據(jù)提交前,檢查用戶是否有對此控件進(jìn)行選擇?小編將介紹使用Javascript與CustomValidator自定義驗(yàn)證控件來檢查感興趣的朋友可以了解下2013-01-01asp.net 擴(kuò)展GridView 增加單選按鈕列的代碼
asp.net 擴(kuò)展GridView 增加單選按鈕列的代碼2010-02-02ASP.NET GridView中文本內(nèi)容無法換行(自動換行/正常換行)
用GridView來顯示課程表,每個單元格的內(nèi)容包括課程名、上課地點(diǎn)、教師姓名,然后我想讓它們分行顯示,感興趣的朋友可以了解下,或許對你有所幫助2013-02-02記錄游客頁面訪問IP的簡易實(shí)現(xiàn)代碼 (asp.net+txt)
記錄游客頁面訪問IP的簡易實(shí)現(xiàn) (asp.net for notepad)2010-01-01剖析Asp.Net路由系統(tǒng)實(shí)現(xiàn)原理
本篇文章主要介紹了剖析Asp.Net路由系統(tǒng)實(shí)現(xiàn)原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-02-02