标签助手没有在ASP.NET的Core 2
问题描述:
我已经添加了以下标记辅助处理:标签助手没有在ASP.NET的Core 2
using System;
using System.Linq;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.AspNetCore.Mvc.TagHelpers;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using Microsoft.AspNetCore.Razor.TagHelpers;
namespace X.TagHelpers
{
[HtmlTargetElement(Attributes = ValidationForAttributeName + "," + ValidationErrorClassName)]
public class ValidationClassTagHelper : TagHelper
{
private const string ValidationForAttributeName = "k-validation-for";
private const string ValidationErrorClassName = "k-error-class";
[HtmlAttributeName(ValidationForAttributeName)]
public ModelExpression For { get; set; }
[HtmlAttributeName(ValidationErrorClassName)]
public string ValidationErrorClass { get; set; }
[HtmlAttributeNotBound]
[ViewContext]
public ViewContext ViewContext { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
Console.WriteLine("\n\n------------!!!!!!---------\n\n");
ModelStateEntry entry;
ViewContext.ViewData.ModelState.TryGetValue(For.Name, out entry);
if (entry == null || !entry.Errors.Any()) return;
var tagBuilder = new TagBuilder(context.TagName);
tagBuilder.AddCssClass(ValidationErrorClass);
output.MergeAttributes(tagBuilder);
}
}
}
,然后在_ViewImports.cshtml
我已经添加了一行:
@addTagHelper *, X.TagHelpers
文件编译正确,如果我引入语法错误dotnet build
警告我。
然后在我的网页之一,我补充一下:
<div k-validation-for="OldPassword" k-error-class="has-danger"></div>
如果我打开我看到在服务器端没有控制台输出和k-validation-for
和k-error-class
被转发到因为是生成的页面的页面(相将has-danger
类添加到class
属性)。
我在做什么错?
答
注册标签助手时,需要的是程序集,而不是名称空间 - 在docs中进行了解释。
...第二个参数“Microsoft.AspNetCore.Mvc.TagHelpers”指定包含标签助手的程序集。 Microsoft.AspNetCore.Mvc.TagHelpers是内置ASP.NET Core Tag Helpers的程序集。
所以你的情况,你可以改变这一点:
@addTagHelper *, X.TagHelpers
要这样:
@addTagHelper *, X
Visual Studio或应用程序控制台哪一个? – levent
我在Mac OS X上通过'dotnet'控制台/终端应用程序。调用'dotnet build' /'dotnet run'。 – Shoe