C# 我可以在DataAnnotations.StringLength中使用数字以外的其他属性参数吗?
我有一个包含所有硬编码代码的(设置)类。它对于某些字段(如maxCharactersFields和错误消息)非常方便,这样我就可以将同一字段用于映射、模型和视图模型。因此,如果将来它要改变它,一切都会以同样的方式改变。但是,我似乎无法在viewmodels中使用此功能。更具体地说,是System.ComponentModel.DataAnnotations的StringLength 它给出的错误是“属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式。” 我已经尝试过的某些方法是用我正在使用的ViewModel中的一个字段替换它,但它会产生相同的错误。我已经在StackOverflow上搜索过了,但似乎找不到任何人尝试过这样做,却遇到了同样的问题 到目前为止,我学到的是,我不能使用我的设置类,因为它不是一个基本类型,但有办法解决它吗 该错误发生在StringLength的行中C# 我可以在DataAnnotations.StringLength中使用数字以外的其他属性参数吗?,c#,componentmodel,C#,Componentmodel,我有一个包含所有硬编码代码的(设置)类。它对于某些字段(如maxCharactersFields和错误消息)非常方便,这样我就可以将同一字段用于映射、模型和视图模型。因此,如果将来它要改变它,一切都会以同样的方式改变。但是,我似乎无法在viewmodels中使用此功能。更具体地说,是System.ComponentModel.DataAnnotations的StringLength 它给出的错误是“属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式。” 我已经尝试过的某些
[Display (Name = "E-mail van de gebruiker", Prompt = "John.Doe@gmail.com")]
[DataType (DataType.EmailAddress)]
[Required]
[StringLength(Settings.maxCharactersEmail)]
public string Email { get; set; }
它实际上与您的设置类类型没有任何关系。属性是编译时的东西,所以不能使用静态值或实例值。必须使用常量值(
public const int
):
您的属性现在可以工作了:
[Display (Name = "E-mail van de gebruiker", Prompt = "John.Doe@gmail.com")]
[DataType (DataType.EmailAddress)]
[Required]
[StringLength(Settings.maxCharactersEmail)]
public string Email { get; set; }
然而,有没有一种方法可以让我使用设置类中的int,因为如果它要改变,我每次都要在两个位置改变它。对于一个属性来说,这并不重要,但是大约有200个,很容易忘记一个。哦,我读了一遍,非常感谢!你救了我很多时间!祝你有美好的一天!如果希望验证规则是可配置的,则必须在代码中验证模型。至于“硬编码设置”,没有理由这样做。您可以从各种来源读取配置。您也可以在完整框架中使用.NET Core中使用的相同配置系统,只需将Microsoft.Extensions.configuration包添加到应用程序中,并从多个文件格式、数据库、环境变量等中读取配置设置。依赖项注入也适用同样的方法。
public static class Settings
{
public const int maxCharactersEmail= 320; //Googled it
}
[Display (Name = "E-mail van de gebruiker", Prompt = "John.Doe@gmail.com")]
[DataType (DataType.EmailAddress)]
[Required]
[StringLength(Settings.maxCharactersEmail)]
public string Email { get; set; }