如果我有以下标签助手:
[Flags]
public enum SubresourceIntegrityHashAlgorithm
{
SHA256 = 1,
SHA384 = 2,
SHA512 = 4
}
[HtmlTargetElement("script", Attributes = "asp-subresource-integrity")]
public class FooTagHelper : TagHelper
{
[HtmlAttributeName("asp-subresource-integrity")]
public SubresourceIntegrityHashAlgorithm HashAlgorithms { get; set; }
= SubresourceIntegrityHashAlgorithm.SHA256;
public override void Process(TagHelperContext context, TagHelperOutput output)
{
// ...
}
}
如何使用我在上面的属性中提供的默认值,以便在使用该属性时不必为该属性提供值:
<script asp-subresource-integrity src="..."></script>
代替:
<script asp-subresource-integrity="SubresourceIntegrityHashAlgorithm.SHA256" src="..."></script>
我在此处的MVC GitHub页面上提出了一个问题,因为它实际上应该是内置功能。
当您将属性添加到的属性列表时HtmlTargetElement
,该属性是应用标签助手所需的,并且需要一个值。
如果您尝试不带任何值或使用空值来使用它,则会出现类似以下错误:
<my-script asp-subresource-integrity src="foo.js"></my-script>
类型为'WebApplication7.TagHelpers.SubresourceIntegrityHashAlgorithm'的标记助手绑定属性不能为空或仅包含空格
即使将属性的类型更改为可为空的类型(如string),您也会遇到相同的错误。到目前为止,我发现具有可选属性的最好方法是不要将它们包含在属性列表中:
[HtmlTargetElement("script")]
当然,这意味着无论是否有属性asp-subresource-integrity
,都将应用标签助手,而您很可能不希望这样做。您可以通过以下两种方法解决此问题:
您可以将另一个属性用作“标记”属性,该属性除了限制存在标记属性时要应用的标记助手外,没有其他作用。
[HtmlTargetElement("script", Attributes = "my-script")]
public class FooScriptTagHelper : TagHelper
{
...
}
<!--This uses the default value-->
<script my-script src="foo.js"></script>
<!--This uses a specific value-->
<script my-script asp-subresource-integrity="..." src="foo.js"></script>
另一种方法是使用自定义标签名称,然后在使用默认值时可以省略该属性:
[HtmlTargetElement("my-script")]
<!--This uses the default value-->
<my-script src="foo.js"></my-script>
<!--This uses a specific value-->
<my-script asp-subresource-integrity="..." src="foo.js"></my-script>
请记住,即使采用这些方法,当您使用属性时,仍然需要提供一个值。我的意思是,您可以添加或忽略该属性,但是如果该属性存在,则它需要一个非空值:
<!--This will still throw an exception-->
<my-script asp-subresource-integrity src="foo.js"></my-script>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句