Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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检查仅与字符串数组匹配的属性_C#_Asp.net_Arrays_Asp.net Mvc_Data Annotations - Fatal编程技术网

C# 如何使用DataAnnotations检查仅与字符串数组匹配的属性

C# 如何使用DataAnnotations检查仅与字符串数组匹配的属性,c#,asp.net,arrays,asp.net-mvc,data-annotations,C#,Asp.net,Arrays,Asp.net Mvc,Data Annotations,我有一个特点: [MaxLength(3)] public string State { get; set; } 在名为State的属性上,我只希望它与给定的5个澳大利亚州匹配: {“维多利亚州”、“新南威尔士州”、“昆士兰州”、“南卡罗来纳州”、“塔斯州”、“佤邦”}。如何在此上下文中使用数据批注?您可以使用 它应该只允许VIC、NSW、QLD、TA、WA或SA您可以为此创建继承自ValidationAttribute的属性 [AttributeUsage(AttributeTargets.

我有一个特点:

[MaxLength(3)]
public string State { get; set; }
在名为
State
的属性上,我只希望它与给定的5个澳大利亚州匹配:
{“维多利亚州”、“新南威尔士州”、“昆士兰州”、“南卡罗来纳州”、“塔斯州”、“佤邦”}
。如何在此上下文中使用数据批注?

您可以使用


它应该只允许VIC、NSW、QLD、TA、WA或SA

您可以为此创建继承自
ValidationAttribute
的属性

[AttributeUsage(AttributeTargets.Property, Inherited = true)]
public class StringRangeAttribute : ValidationAttribute
{       
    public string[] AllowableValues { get; set; }

    public override bool IsValid(object value)
    {
        string actualValue = value as string;

        if (AllowableValues?.Contains(actualValue) == true)
        {
            return true;
        }
        return false;
    }
}
然后像这样使用它:

[StringRange(AllowableValues = new string[] { "VIC", "NSW", "QLD", "SA", "TAS", "WA"})]
public string State{ get; set; }
这里我们在数组上使用Linq的
Contains
方法

如果您需要不区分大小写的选项,那么正如Codexer指出的,您可以使用:

if (AllowableValues?.Contains(actualValue?.ToUpper()) == true)

@克里希纳·穆帕拉伟大的解决方案,这就是我正在研究的。@BachDao,我很高兴它成功了!。如果(AllowableValues?.Contains(actualValue)=true),您可以将其标记为答案
这不允许按say
vic
而不是
vic
?可能
if(AllowableValues?.Contains(actualValue.ToUpper())==true)
No,我不这么认为。Contains是区分大小写的。如果用户需要特定的值(区分大小写),Contains将不起作用,因为它不区分大小写,也许OP可以插话?哦,我明白了,对不起。是的,对不起,你说得对。取决于OP想要什么。我以为你说它会允许
vic
vic
。这个答案是区分大小写的。没问题,只是不知道用户是否需要特定的敏感度,他们没有提到这一点,我的假设与OP发布的内容不符。无论如何,这是一个比选择答案更好的选择。
if (AllowableValues?.Contains(actualValue?.ToUpper()) == true)