我一直在阅读有关MVC 6中对Tag Helpers的新支持,现在需要创建自己的.我看到现有HTML元素的内置标记助手都以"asp-"为前缀
例如:
<a asp-controller="Home" asp-action="Index">Home</a>
但是我自己的自定义标签助手呢.我是否还应该使用"asp-"作为前缀,以表明它正在服务器上运行.或者这应该保留给框架属性?我应该创建自己的项目/公司名称前缀吗?
我错过了关于这个主题的指导吗?
在ASP.NET MVC 6项目中,我有以下内容:
[Route("help/how-it-works")]
public IActionResult HowItWorks() {
return View();
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个标签助手,如下所示:
<a class="menu" asp-controller="Help" asp-action="HowItWorks" route-is="help/how-it-works" css-class="active">How it works</a>
Run Code Online (Sandbox Code Playgroud)
所以route-is标签帮助器将检查当前路由是否为"help/how-it-works"...如果是,则将"active"添加到A标签的css类.
所以我开始创建一个标签助手:
[TargetElement("a", Attributes = "route-is, css-class")]
public class RouteTagHelper : TagHelper
{
public override void Process(TagHelperContext context, TagHelperOutput output)
{
String routeIs = context.AllAttributes["route-is"].ToString();
String cssClass = context.AllAttributes["css-class"].ToString();
if (String.IsNullOrWhiteSpace(cssClass))
cssClass = "active";
ViewContext.RouteData.Values.Keys;
}
}// Process
Run Code Online (Sandbox Code Playgroud)
我的问题是如何确定当前路由是否为"help/how-it-works",以及是否将Css类添加到A标记而不更改其他任何内容.
有没有人知道如何做到这一点?
更新1
使用属性路由时解决了重复值的问题,并添加了Daniel JG提出的替代方法
[TargetElement("a", Attributes = RouteIsName)]
[TargetElement("a", Attributes = RouteHasName)]
public class ActiveRouteTagHelper : TagHelper
{
private const String …Run Code Online (Sandbox Code Playgroud)