[英]Creating custom data annotation validation in MVC 3
例如,我有一個員工視圖 model。 創建員工時,我想驗證用戶名以確保它不存在。
public class EmployeeViewModel
{
[ScaffoldColumn(false)]
public int EmployeeId { get; set; }
[ValidateDuplicate(ErrorMessage = "That username already exists")]
[Required(ErrorMessage = "Username is required")]
[DisplayName("Username")]
public string Username { get; set; }
}
然后讓我的 ValidateDuplicate function 與代碼一起檢查是否重復。
這可能嗎?
我建議查看遠程驗證。 該示例甚至與您的情況相匹配。
基本上,將遠程屬性添加到指向 controller 操作的視圖模型屬性
[Remote("IsUserExists", "Account", ErrorMessage = "Can't add what already exists!")]
[Required(ErrorMessage = "Username is required")]
[DisplayName("Username")]
public string Username { get; set; }
你的工作是哪個
public ActionResult IsUserExists(string userName)
{
if (!UserService.UserNameExists(userName) || (CurrentUser.UserName == userName))
{
return "Ok.";
}
}
您可以按照此處的說明編寫自己的自定義驗證。 我修改了代碼以在 model 中添加驗證,因為我更喜歡 model 中的軌道活動記錄的驗證樣式。
public class EmployeeViewModel
{
[CustomValidation(typeof(EmployeeViewModel), "ValidateDuplicate")]
[Required(ErrorMessage = "Username is required")]
[DisplayName("Username")]
public string Username { get; set; }
public static ValidationResult ValidateDuplicate(string username)
{
bool isValid;
using(var db = new YourContextName) {
if(db.EmployeeViewModel.Where(e => e.Username.Equals(username)).Count() > 0)
{
isValid = false;
} else {
isValid = true;
}
}
if (isValid)
{
return ValidationResult.Success;
}
else
{
return new ValidationResult("Username already exists");
}
}
}
是的,這是可能的。 您需要編寫自己的驗證屬性。
您可以通過擴展屬性 class 來實現,將其稱為 ValidateDuplicate。 我會避免這樣做,因為它只是您可能需要調用數據庫的另一個地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.