【发布时间】:2018-01-20 18:47:55
【问题描述】:
我正在尝试使用 ASP.NET Core 2.0 遵循以下tutorial。该代码应该将<email> 标记替换为锚标记<a href="mailto:email@something.com" />。当我运行项目时,TagHelper 代码永远不会执行。任何建议将不胜感激。
注意:这似乎是 Visual Studio 项目的问题。我找到了一个与 TagHelpers 一起工作的视觉工作室code sample,并使用它作为模板重新创建了我的项目,并且成功了。我对我的项目和工作项目进行了比较,但在 .sln 或 .csproj 文件中没有发现任何重大差异来解释问题。
这里是 TagHelper 类:
using Microsoft.AspNetCore.Razor.TagHelpers;
using System.Threading.Tasks;
namespace AuthoringTagHelpers.TagHelpers
{
[HtmlTargetElement("email")]
public class EmailTagHelper : TagHelper
{
private const string EmailDomain = "contoso.com";
// Can be passed via <email mail-to="..." />.
// Pascal case gets translated into lower-kebab-case.
[HtmlAttributeName("mail-to")]
public string MailTo { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a"; // Replaces <email> with <a> tag
var address = MailTo + "@" + EmailDomain;
output.Attributes.SetAttribute("href", "mailto:" + address);
output.Content.SetContent(address);
}
}
}
这是使用 TagHelper 的视图:
@{
ViewData["Title"] = "About";
}
<h2>@ViewData["Title"]</h2>
<h3>@ViewData["Message"]</h3>
<p>Use this area to provide additional information.</p>
<address>
<strong>Support:</strong><email mail-to="Support"></email><br />
<strong>Marketing:</strong><email mail-to="Marketing"></email>
</address>
我在 _ViewImports.cshtml 中添加了以下内容:
@addTagHelper *, AuthoringTagHelpers
【问题讨论】:
-
我正在尝试相同的示例,在我的情况下,无法识别 TagHelper 基类。上下文菜单(Rosalyn/ReSharper?)中的一种解决方案是在 nuget.org 上查看。这指向 Microsoft.AspNetCore.Razor.Runtime。安装该软件包后,TagHelper 被识别。
标签: asp.net-core asp.net-core-tag-helpers