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

时间:2019-04-18 08:32:06

标签: c# componentmodel

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

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

我已经尝试过的某些事情是用我正在使用的ViewModel中的一个字段替换它,但是它给出了相同的错误。我已经在StackOverflow上进行了搜索和搜索,但似乎找不到任何尝试执行此类操作并遇到相同问题的人。

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

该错误发生在StringLength行中。

ID_A    P1  P2  P3  P4  ID_B    Text
1       5   6   6   6   5       Bla bla Bla
1       5   6   6   6   6       Bla bla bla bla
1       5   6   6   6   6       Bla bla bla bla
1       5   6   6   6   6       Bla bla bla bla
2       3   4   5   6   3       Bla bla ecc
2       3   4   5   6   4       Bla Bla
2       3   4   5   6   5       Bla bla Bla
2       3   4   5   6   6       Bla bla bla bla
[Display (Name = "E-mail van de gebruiker", Prompt = "John.Doe@gmail.com")]
        [DataType (DataType.EmailAddress)]
        [Required]
        [StringLength(Settings.maxCharactersEmail)]
        public string Email { get; set; }

1 个答案:

答案 0 :(得分:1)

它实际上与您的设置类类型无关。属性是编译时的东西,因此您不能使用静态或实例值。您必须使用常量值(public const int):

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