【发布时间】:2020-01-26 13:32:34
【问题描述】:
在一个 ASP.NET Core 3.0 Web 应用程序中,我添加了以下简单的标签助手:
[HtmlTargetElement("submit-button")]
public class SubmitButtonTagHelper : TagHelper
{
public string Title { get; set; } = "Submit";
public string Classes { get; set; }
public string Id { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.Content.SetHtmlContent(
$@"<span class=""btn btn-primary {Classes}"" id=""{Id}"">{Title}</span>");
}
}
我打算这样使用:
<submit-button></submit-button>
但是,添加 SubmitButtonTagHelper 甚至不尝试使用它的行为会导致以下运行时异常:
InvalidOperationException:尚未为页面调用 RenderBody 在'/Views/Shared/_Layout.cshtml'。忽略调用 IgnoreBody()。
我已通过将此行添加到 Pages/_ViewImports.cshtml 文件中来导入标签助手:
@addTagHelper *, Web
我的 _Layout.cshtml 页面如下所示:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title><vc:product-name></vc:product-name> @ViewData["Title"]</title>
@RenderSection("Styles", required: false)
<partial name="_FrameworkStyles" />
</head>
<body class="top-navigation">
<div id="wrapper">
<div id="page-wrapper" class="gray-bg">
<div class="">
<vc:Navigation></vc:Navigation>
@RenderBody()
<div class="footer"></div>
</div>
</div>
</div>
<partial name="_FrameworkScripts" />
@RenderSection("Scripts", required: false)
</body>
</html>
我怎么会出错?在调试时,我可以看到 SubmitButtonTagHelper 中的断点被击中,但我还没有在任何地方引用它?我的理解是 [HtmlTargetElement] 属性意味着它只适用于元素标签是“提交按钮”的地方。这不正确吗?
我的项目中有另一个标签助手,我还注意到该类中的断点也在我没有引用它的地方被命中。
我肯定在做一些傻事,但是什么?
【问题讨论】:
标签: c# asp.net-core tag-helpers