您可能需要通过 TagHelper 来实现此功能,它可以读取此属性并在渲染时将其添加到元素中,作为默认值asp-for
一个人不会处理这个。
扩展输入 TagHelper
尝试在您的项目中声明一个标记帮助程序,如下所示,这将扩展现有的asp-for
帮助器并处理读取任何现有属性/元数据并将必要的属性附加到元素:
namespace YourProject.TagHelpers
{
[HtmlTargetElement("input", Attributes = "asp-for")]
public class MaxLengthTagHelper : TagHelper
{
public override int Order { get; } = 999;
[HtmlAttributeName("asp-for")]
public ModelExpression For { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
base.Process(context, output);
// Process only if 'maxlength' attr is not present
if (context.AllAttributes["maxlength"] == null)
{
// Attempt to check for a MaxLength annotation
var maxLength = GetMaxLength(For.ModelExplorer.Metadata.ValidatorMetadata);
if (maxLength > 0)
{
output.Attributes.Add("maxlength", maxLength);
}
}
}
private static int GetMaxLength(IReadOnlyList<object> validatorMetadata)
{
for (var i = 0; i < validatorMetadata.Count; i++)
{
var stringLengthAttribute = validatorMetadata[i] as StringLengthAttribute;
if (stringLengthAttribute != null && stringLengthAttribute.MaximumLength > 0)
{
return stringLengthAttribute.MaximumLength;
}
var maxLengthAttribute = validatorMetadata[i] as MaxLengthAttribute;
if (maxLengthAttribute != null && maxLengthAttribute.Length > 0)
{
return maxLengthAttribute.Length;
}
}
return 0;
}
}
}
使用标签助手
然后直接在您的特定视图中添加对它的引用,或者在全局中添加对它的引用_ViewImports.cshtml
文件如下所示:
@using YourProject
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@addTagHelper *, YourProject
添加后,这个扩展的 TagHelper 应该自动用适当的元素装饰您的元素maxlength
属性(如果您的财产上存在):
<!-- Input -->
<label asp-for="PostCode"></label>
<input style="font-weight: normal;" class="form-control" placeholder="Post Code" asp-for="PostCode" data-val="true" autofocus />
<!-- Rendered -->
<label for="PostCode">Post Code</label>
<input style="font-weight: normal;" class="form-control" placeholder="Post Code" data-val="true" autofocus="" type="text" data-val-maxlength="Maximum number of characters that can be entered is 8!" data-val-maxlength-max="8" id="PostCode" name="PostCode" value="" maxlength="8">