2011-05-20 186 views
1

我有一個MVC 3應用程序,並試圖顯示自定義驗證錯誤。模型生成的常規驗證錯誤(即必需)顯示在頁面上。現在,如果用戶存在,我檢查,如果是這樣,添加一個錯誤信息:自定義驗證錯誤不顯示

if (userExists) 
    ModelState.AddModelError("UserName", UserManagementResources.UserAlreadyExistsText); 
return View(model); 

在我有一個驗證摘要和Html.ValidationMessage(「用戶名」)的觀點,但沒有一個是顯示錯誤。我已經在其他頁面上成功地使用了它。我可以看到這個頁面的唯一區別在於,它使用RequiredIf驗證器腳本。 http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx

任何想法如何解決這個問題,讚賞。謝謝。


編輯

我通過遠程驗證返回驗證消息。如果我查看網絡正在做什麼,它會返回錯誤消息,但它仍然不顯示在視圖上。

[Required] 
    [DataType(DataType.EmailAddress)] 
    [Remote("IsUserAvailable", "Validation", ErrorMessage = "Ein Benutzer mit dieser Email existiert bereits.")] 
    [Display(Name = Resources.EmailText, ResourceType = typeof(Resources))] 
    public string Email 
    { 
     get { return User.Email; } 
     set { User.Email = value; } 
    } 

的觀點:

@Html.LabelFor(u => u.Email, Resources.Email + " (Login) *") 
@Html.EditorFor(u => u.Email) 
@Html.ValidationMessageFor(u => u.Email) 
<br clear="all" /> 

遠程驗證控制器:

public class ValidationController : Controller 
{ 
    public JsonResult IsUserAvailable(string Email) 
    { 
     bool userExists; 

     using (var userModel = new UserManagementModel()) 
     { 
      userExists = userModel.UserExists(Email); 
     } 

     if(userExists) 
      return Json(UserManagementResources.UserAlreadyExists, JsonRequestBehavior.AllowGet); 
     else 
      return Json(true, JsonRequestBehavior.AllowGet); 
    } 

} 

回答

3

你爲什麼不使用Remote validation這個?

爲什麼回覆只是爲了檢查用戶是否存在?

例如:

public class RegisterModel 
{ 
    [Required] 
    [Remote("UserNameExists", "Validation", "", ErrorMessage = "Username is already taken.")] 
    [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed.")] 
    [Display(Name = "Username")] 
    public string UserName { get; set; } 
} 

,並創建具有UserNameExists方法類似

public JsonResult UserNameExists(string UserName) 
{ 
    var user = _db.Users.Where(x => x.username.Equals(UserName)); 

    return user == null ? 
     Json(true, JsonRequestBehavior.AllowGet) : 
     Json(string.Format("{0} is not available.", register.UserName), JsonRequestBehavior.AllowGet); 
} 
+0

好吧,我已經添加了RemoteValidation,現在它調用驗證並返回一個值,但驗證消息仍然不會顯示... – Nischo 2011-05-20 12:27:38

+0

你有腳本嗎? - > http://stackoverflow.com/questions/6016389/asp-net-mvc3-validation-problem/6016417#6016417 – balexandre 2011-05-20 13:30:40

+0

我有所有的腳本,但版本不同jquery.min.js和validation.min.js,它現在正在工作,非常感謝=) – Nischo 2011-05-20 14:50:14

1

一個驗證控制器當你改變你的jquery.js的版本,你必須改變validation.js文件好。不同的版本彼此不兼容,當您混淆文件時,您可能會在不同的瀏覽器中看到奇怪的行爲。