Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以在DataAnnotations.StringLength中使用数字以外的其他属性参数吗?_C#_Componentmodel - Fatal编程技术网

C# 我可以在DataAnnotations.StringLength中使用数字以外的其他属性参数吗?

C# 我可以在DataAnnotations.StringLength中使用数字以外的其他属性参数吗?,c#,componentmodel,C#,Componentmodel,我有一个包含所有硬编码代码的(设置)类。它对于某些字段(如maxCharactersFields和错误消息)非常方便,这样我就可以将同一字段用于映射、模型和视图模型。因此,如果将来它要改变它,一切都会以同样的方式改变。但是,我似乎无法在viewmodels中使用此功能。更具体地说,是System.ComponentModel.DataAnnotations的StringLength 它给出的错误是“属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式。” 我已经尝试过的某些

我有一个包含所有硬编码代码的(设置)类。它对于某些字段(如maxCharactersFields和错误消息)非常方便,这样我就可以将同一字段用于映射、模型和视图模型。因此,如果将来它要改变它,一切都会以同样的方式改变。但是,我似乎无法在viewmodels中使用此功能。更具体地说,是System.ComponentModel.DataAnnotations的StringLength

它给出的错误是“属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式。”

我已经尝试过的某些方法是用我正在使用的ViewModel中的一个字段替换它,但它会产生相同的错误。我已经在StackOverflow上搜索过了,但似乎找不到任何人尝试过这样做,却遇到了同样的问题

到目前为止,我学到的是,我不能使用我的设置类,因为它不是一个基本类型,但有办法解决它吗

该错误发生在StringLength的行中

[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; }