未显示自定义验证错误

时间:2011-05-20 09:44:07

标签: asp.net-mvc validation asp.net-mvc-3 custom-errors

我有一个MVC 3应用程序,我正在尝试显示自定义验证错误。模型生成的正常验证错误(即必需)显示在页面上。现在我正在检查用户是否存在,如果存在,则添加错误消息:

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

在视图中,我有一个验证摘要和一个Html.ValidationMessage(“UserName”),但是没有人显示错误。我在其他页面上成功使用过它。我可以看到与该页面的唯一区别是,它使用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);
    }

}

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

当您更改jQuery.js的版本时,您还必须更改validation.js文件。不同的版本彼此不兼容,当您混淆文件时,您可能会在不同的浏览器中看到奇怪的行为。