Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.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# 多数据注释不';行不通_C#_Data Annotations - Fatal编程技术网

C# 多数据注释不';行不通

C# 多数据注释不';行不通,c#,data-annotations,C#,Data Annotations,我班上有以下代码: [Required( ErrorMessageResourceType = typeof (Resources), ErrorMessageResourceName = "VALIDATION_ERROR_ISO" )] [StringLength(3, ErrorMessageResourceType = typeof (Resources), ErrorMessageResourceName = "VALIDATION_ERROR_

我班上有以下代码:

[Required(
    ErrorMessageResourceType = typeof (Resources),
    ErrorMessageResourceName = "VALIDATION_ERROR_ISO"
    )]
[StringLength(3,
    ErrorMessageResourceType = typeof (Resources),
    ErrorMessageResourceName = "VALIDATION_ERROR_STRING_LENGTH_3"
    )]

public virtual string ISO
{
    get { return iso; }
    set
    {
        iso = value;
        OnPropertyChanged("ISO");
    }
}
此方法用于验证:

public bool IsValid
{
    get
    {
        var validationContext = new ValidationContext(this, null, null);
        return Validator.TryValidateObject(this, validationContext, validationResults);
    }
}
在我的单元测试中:

var testLanguage = new Language(){ISO = "More than 3 characters"};
Assert.IsTrue(!testLanguage.IsValid);
这是有效的。如果ISO属性为null,则由于必需的属性,该属性无效。我的IsValid似乎没有检查Stringlength(3)属性

我使用VisualStudio2010

先谢谢你

编辑:

我发现了我的错误:

return Validator.TryValidateObject(this, validationContext, validationResults);
需要true标志来检查所有属性。现在,它与:

return Validator.TryValidateObject(this, validationContext, validationResults, true);

把它倒过来就行了。试试这个

[StringLength(3,
    ErrorMessageResourceType = typeof (Resources),
    ErrorMessageResourceName = "VALIDATION_ERROR_STRING_LENGTH_3"
    )]
[Required(
    ErrorMessageResourceType = typeof (Resources),
    ErrorMessageResourceName = "VALIDATION_ERROR_ISO"
    )]
public virtual string ISO
{
    get { return iso; }
    set
    {
        iso = value;
        OnPropertyChanged("ISO");
    }
}

创建一个示例MVC应用程序并用一个文本框绑定ISO,我的代码就可以工作了。我已经在我的环境中进行了测试。若我将Required放在StringLength之前,那个么StringLength验证不会启动,但相反的验证正在工作。