簡體   English   中英

在 MVC 3 中創建自定義數據注釋驗證

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM