1

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

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);
    }

}
4

2 回答 2

3

你为什么不为此使用远程验证

为什么发回只是为了检查用户是否存在?

例子:

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);
}
于 2011-05-20T09:48:26.800 回答
1

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

于 2011-05-20T18:30:53.863 回答