我在使自定义数据注解工作时遇到问题,我试图添加验证属性来验证Customer(CustomerID)的UsergroupName是唯一的。使用数据注释进行自定义验证
[MetadataType(typeof(UsergroupMetaData))]
public partial class Usergroup { }
public class UsergroupMetaData
{
[Required()]
public object CustomerID { get; set; }
[Required(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "UsergroupNameRequired")]
public object UsergroupName { get; set; }
[UniqueUsergroupName(????)]
// what to put here?
}
public class UniqueUsergroupName : ValidationAttribute
{
UsergroupRepository _rep = new UsergroupRepository();
public override bool IsValid(object value, int customerID)
{
var x = _rep.GetUsergroups().ByUsergroupName(value).ByCustomerID(customerID);
// what to put here?
return false;
}
}
如果“count> 0”,IsValid应返回false。
我该如何解决这个问题,以便它能正常工作。 GetUsergroups()返回IQueryable。
编辑:
[MetadataType(typeof(UsergroupMetaData))]
public partial class Usergroup { }
public class UsergroupMetaData
{
public object CustomerID { get; set; }
[Required(ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "UsergroupNameRequired")]
[UniqueUsergroupName(ErrorMessageResourceType= typeof(Resources), ErrorMessageResourceName = "UsergroupNameExists")]
public object UsergroupName { get; set; }
}
public class UniqueUsergroupName : ValidationAttribute
{
UsergroupRepository _rep = new UsergroupRepository();
public override bool IsValid(object value, int customerID)
{
int usergroups = _rep.GetUsergroups().ByCustomerID(customerID).ByUsergroupName(value.ToString()).Count();
return usergroups >0;
}
}
如何传递当前的客户ID作为参数?
/M
我没有看到我应该如何在我的场景中应用它。因为它使用数据库和所有。特别是如果客户ID是可空的而不是必需的。 – 2010-01-11 12:22:19
我添加了一些写在飞行代码来解释我的想法可能会在你的情况下使用。检查出来,告诉我,如果这对你有用。正如我在帖子中看到的那样,主要的做法是使整个类的验证属性不仅仅是一个特定的属性。告诉我它是怎么回事。 – Meligy 2010-01-12 01:09:48