.NET5 MVC6 提供两种自定义UI扩展方式:
一种是自定义HTML标签的方式:使用TagHelpers(标签)
第二种是返回自定义内容的方式:使用ViewComponent(组件)
本次进行简单入门记录的是:TagHelpers
首先来看看MVC6的Razor页面里自带的Tag,如下:
<label asp-for="Price" class="control-label">商品价格:</label>
其中:asp-for 就是MVC6自带的标记帮助器,在编辑的时候是带有智能提示的,且在转换成HTML代码的时候,会自动转换成如下格式:
<label class="control-label" for="Price">商品价格:</label>
如何自定义标签和标签上的属性呢?先来看一段简单的自定义代码:
[HtmlTargetElement("del-button")]
public class DelTagHelper : TagHelper
{
public string title => "删除";
public string url { get; set; }
public object id { get; set; }
public bool disabled { get; set; }
public bool hide { get; set; }
public bool verify { get; set; } = true;
public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (verify)
{
hide = TagTool.VerifyLink(url);
}
if (!hide)
{
output.TagName = "a";
output.TagMode = TagMode.StartTagAndEndTag;
output.Attributes.SetAttribute("rel", "tooltip");
if (disabled)
{
output.Attributes.SetAttribute("class", "btn btn-danger disabled");
output.Attributes.SetAttribute("disabled", "disabled");
}
else
{
output.Attributes.SetAttribute("class", "btn btn-danger");
output.Attributes.SetAttribute("onclick", $"delitem(this,{id})");
output.Attributes.SetAttribute("href", url);
output.Attributes.SetAttribute("data-id", id);
}
output.Attributes.SetAttribute("title", title);
output.Content.SetHtmlContent("<i class=\"icon-delete\"></i>");
}
else
{
}
}
}在Razor视图中使用方法:
<del-button id="@item.Id" url="@Url.Action("DeleteMenu")"></del-button>在编辑的时候,id,url也都有智能提示,对开发的效率有极大提升。
好的现在解释一下代码:
一、[HtmlTargetElement("del-button")]:引号里面的名称即为我的在Razor视图中使用的标签名(ps:是带有智能提示的哦)
类的前面声名了6个属性,这6个属性可以在Razor视图中我们自定义的标签上使用,且带智能提示,意思就不讲解了就是字面意思。
特别讲一下verify,他是权限验证,默认是给到了权限验证的,没有权限就不会显示,这对需要进行权限验证的项目帮助极大。
二、public override void Process(TagHelperContext context, TagHelperOutput output)即为对Tag的封装,output即为我们要输出到界面的内容
三、output.TagName = "a";指定输出的标签为a标签
四、output.TagMode = TagMode.StartTagAndEndTag;指定输出的Tag标签是包含开始和结束的(有些html标签是不需要结束的,比如:input)
五、output.Attributes.SetAttribute("rel", "tooltip");设置其他自定义属性,rel为属性名,tooltip是属性值。
六、output.Content.SetHtmlContent("<i class=\"icon-delete\"></i>");在a标签内添加html内容
造成的html代码如下:
<a rel="tooltip" class="btn btn-danger" onclick="delitem(this,36)" href="/Auth/DeleteMenu" data-id="36" title="" data-original-title="删除"><i class="icon-delete"></i></a>
效果图如下:

更多操作请前往微软官方文档