【发布时间】:2015-09-20 23:41:04
【问题描述】:
在一个类中,我有一个允许的静态值列表
private static List<string> allowedClassNames = new List<string> {"Real Estate", "Factored Debt"};
我也有该类的一个属性,我想将其限制为该列表中的值。
[Required]
public string assetClassName { get; set; }
我想在模型级别执行此操作,因此它可以在 REST 或视图上下文中工作。
我将如何强制将提交中的值限制在该列表中?
谢谢!
这是我结束的地方 - 尚未完全测试,但为未来的海报提供一个想法。
class MustContainAttribute : RequiredAttribute
{
public string Field { get; private set; }
List<string> allowed;
public MustContainAttribute(string validateField)
{
this.Field = validateField;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
switch (Field)
{
case "assetClassName":
allowed = new List<string> { "Real Estate", "Factored Debt" };
break;
default:
return ValidationResult.Success;
}
if (!allowed.Contains(Field))
{
return new ValidationResult("Invalid Value");
}else{
return ValidationResult.Success;
}
}
}
【问题讨论】:
-
使用
RegularExpressionAttribute来限制值,或者编写自己的验证属性(比如)[MustContain("allowedClassNames")]并在IsValid()方法中,将值与其他属性中的值进行比较跨度> -
另一种方法是对属性使用枚举。如果恶意用户尝试提交除枚举值之一以外的任何内容,
ModelSate将无效
标签: c# asp.net-mvc validation asp.net-mvc-5