我有一个类,其中包含属性'TextPair‘的列表,如下所示:
public class Student
{
public List<TextPair> Hobbies { get; set; }
public List<TextPair> Languages { get; set; }
public List<TextPair> Majors { get; set; }
}
public class TextPair
{
[StringLength(2, ErrorMessage = "The value length is invalid")]
public string Value { get; set; }
public string Text { get; set; }
}在这里,我使用StringLength AttributeValidator验证最大长度2的值,并在TextPair模型的属性' value‘中进行修饰。对我来说,问题是长度总是固定的,长度总是强制的。
在我的用例中,我希望应用程序的不同部分(或同一类型的不同属性)的值具有不同的风格,以支持不同的长度。
我正在寻找下面这样的东西,我可以在我的类中传递验证,在那里我声明了我的属性'TextPair‘,也就是说,我不想让验证总是强制的,也不想硬编码值2
public class Student
{
//Any length of the value is accepted for hobbies
public List<TextPair> Hobbies{ get; set; }
[ValuesLength(Length = 2, ErrorMessage = "Language code length must be 2 characters max")]
public List<TextPair> Languages { get; set; }
[ValuesLength(Length = 128, ErrorMessage = "The major should be within 128 characters length")]
public List<TextPair> Majors{ get; set; }
}有没有什么有效的方法来解决这个问题呢?
发布于 2018-02-22 03:23:08
其中一种解决方案如下:
public class Student
{
//Any length of the value is accepted for hobbies
public List<TextPair> Hobbies{ get; set; }
[ValuesLength(MaximumLength = 2, ErrorMessage = "Language code length must be 2 characters max")]
public List<TextPair> Languages { get; set; }
[ValuesLength(MaximumLength = 128, ErrorMessage = "The major should be within 128 characters length")]
public List<TextPair> Majors{ get; set; }
}我的自定义属性验证是检查列表并验证是否有任何元素值超过了提供的长度,如下所示:
public class ValuesLengthAttribute : ValidationAttribute
{
public int MaximumLength { get; set; }
public override Boolean IsValid(object value)
{
Boolean isValid = true;
var list = value as List<TextPair>;
if (list != null && list.Count>0)
foreach (var item in list)
{
if (item.Value.Length > MaximumLength)
isValid = false;
}
return isValid;
}
}发布于 2018-02-21 17:21:17
也许可以尝试对StringLengthAttribute进行子类化以创建所需的ValuesLength属性。请注意,这段代码没有经过测试,只是对最终实现的建议。
public class ValuesLength : StringLengthAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var isValid = true;
var pair = value as TextPair;
if (pair != null && pair.Value != null)
{
var pairValue = pair.Value;
isValid = pairValue.Length < MaximumLength && pairValue.Length > MinimumLength;
}
return IsValid ? ValidationResult.Success : new ValidationResult(ErrorMessage);
}
}https://stackoverflow.com/questions/48897208
复制相似问题