从表单域读取自定义验证属性
本文关键字:验证 属性 自定义 读取 表单 | 更新日期: 2023-09-27 18:31:02
我正在尝试创建自己的验证属性IsUnique
来检查给定属性的现有值。我知道必须覆盖IsValid()
才能自定义验证属性起作用。到目前为止,我已经看到了带有验证属性的示例,这些属性采用字符串参数,然后将其与方法中的硬编码值进行比较IsValid()
这些参数。
我需要IsValid()
方法来访问属性及其值,以进一步将其与数据库中的值进行比较。
这是我到目前为止所做的:
public class IsUnique : ValidationAttribute
{
private string codeno { get; set; }
: base("{0} is already in use")
public IsUnique (string codeno)
{
this.codeno = codeno;
}
public override ValidationResult IsValid(object value,
ValidationContext vContext)
{
if (value != null)
{
MyDBContext db = new MyDBContext();
Student studentsCodeNo =
db.Students.FirstOrDefault(r => r.codeno== (string)value);
if (studentsCodeNo != null)
{
string errorMessage =
FormatErrorMessage(vContext.DisplayName);
return new ValidationResult(errorMessage);
}
}
return ValidationResult.Success;
}
}
如前所述,问题是这个版本需要参数。我希望从用户表单字段中读取codeno
,然后将该值与数据库中的任何值进行比较。我不知道如何从表单字段中读取值。
这是代码
public class IsUnique : ValidationAttribute{
public override ValidationResult IsValid(object value,
ValidationContext vContext)
{
PropertyInfo property = validationContext.ObjectType.GetProperty("Codeno");
if (property == null)
return new ValidationResult(string.Format("Property '{0}' is undefined","Codeno"));
var fieldValue = property.GetValue(validationContext.ObjectInstance, null);
string codeno= (fieldValue == null ? "" : fieldValue.ToString());
if (!string.IsNullOrEmpty(codeno))
{
MyDBContext db = new MyDBContext();
Student studentsCodeNo =
db.Students.FirstOrDefault(r => r.codeno== codeno);
if (studentsCodeNo != null)
{
string errorMessage =
FormatErrorMessage(vContext.DisplayName);
return new ValidationResult(errorMessage);
}
}
return ValidationResult.Success; }}
已经有一种
开箱即用的方法可以做到这一点http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.schema.indexattribute(v=vs.113).aspx
[Index(IsUnique=true)]