asp.net-mvc - Asp.Net core Razor Taghelpers - 强制参数
问题描述
如果我像这样创建一个 EmailTagHelper:
public class EmailTagHelper : TagHelper
{
public string EmailAddress { get; set; }
public string Content { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a";
output.Attributes.SetAttribute("href", "mailto:" + this.EmailAddress);
output.Content.SetContent(this.Content);
}
}
我可以这样使用它:
<email content="Mail me!" email-address="hello@world.com"></email>
但是,我也可以这样做,而不会在 Visual Studio 中出现错误或编译错误:
<email content="Mail me - but where!?"></email>
有没有办法将属性标记为强制,以便它们可以触发编译错误或至少在 Visual Studio 中出现红色曲线,因此在运行时不会发生错误?
解决方案
将所需的属性名称添加到HtmlTargetElement
:
[HtmlTargetElement("email", Attributes ="email-address")]
public class EmailTagHelper : TagHelper
{
public string EmailAddress { get; set; }
public string Content { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
// ...
}
}
此解决方案不会触发编译器错误或显示警告消息,但至少在您提供所需属性之前,html 标记不会在编辑器中以粗体绿色呈现。
如果要在未提供属性时抛出异常,则必须将其从HtmlTargetElement
属性中删除:
[HtmlTargetElement("email")]
public class EmailTagHelper : TagHelper
{
public string EmailAddress { get; set; }
public string Content { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
if (string.IsNullOrWhiteSpace(EmailAddress))
throw new ArgumentNullException(nameof(EmailAddress));
// ...
}
}
推荐阅读
- javascript - Paypal 与 PHP 集成,无需登录 PayPal
- python - 使用占位符计算字典键组
- r - 在 Excel 中使用类似于 VLOOKUP 的 R 函数
- git - 在 github 上同时处理多个项目
- node.js - Monorepo 与 Docker Compose,重新加载依赖项
- java - 此会话中尚未定义序列“PUBLIC.TEST_ID_SEQ”的当前值;SQL 语句:select currval('test_id_seq')
- laravel - 在同一 /URL 上使用两条路由时 Laravel 'Route Not Defined'
- c# - 无法将文件写入 C# 中的共享文件夹
- django - 如何为两个模型提供外键(以表示活动日志)
- vba - 如何在德国创建 VBA 公式