在 Blazor CRUD 组件的 handleSubmit 函数中,我必须提供基于DataAnnotation MaxLength-attribute
. 我想显示一个“自定义”C# 错误消息,如下所示,其中“??” 来自 MaxLength 属性:
$"The 'Vehicle Number' is limited to {??} characters."
CRUD 模型中的 DataAnnotation 是:
[Display(Name = "Vehicle Number")]
[MaxLength(12, ErrorMessage = "'{0}' is limited to {1} characters.")]
public string? TXT_VHCL_NUMBER { get; set; }
我知道namespace is System.ComponentModel.DataAnnotations
应该具有该值,但我不知道如何获取与特定 DataAnnotation MaxLength 属性关联的“车辆编号字段”。
传递给属性构造函数的值必须是常量(或文字,它们是常量)。
有两种非常简单的方法可以让错误消息显示正确的数字。
首先是将数字写入字符串。
好吧,也许您想将“12”提取到变量中。然后将其设为常数。
然后在任何您想要获得该值的地方执行此操作
MyClass.TXT_VHCL_NUMBER_MAX_LENGTH
。据我了解您的问题,使用反射来查找属性上的属性实在是太过分了。把事情简单化。
要利用 的自定义验证消息的最大长度值
MaxLengthAttribute
,您需要使用{1}
占位符。然后,验证器本身将在运行时将其替换为实际数字。例如:
请注意,您还可以使用替换
{0}
来自动获取正在验证的属性的名称,因此您实际上可以使用更通用的模板替换自定义消息:当然,您无法通过这种方式获得单词之间的空格,因为它将按原样使用您的属性名称,而不对其进行任何转换。
以下是查看如何将这些值传递到格式字符串的简单方法:
https://referencesource.microsoft.com/#System.ComponentModel.DataAnnotations/DataAnnotations/MaxLengthAttribute.cs,84
特别要注意
name
和Length
值的位置,它们与格式字符串中的索引 0 和 1 一致。