我在使自定義數據註解工作時遇到問題,我試圖添加驗證屬性來驗證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