【问题标题】:Custom validation error not displayed未显示自定义验证错误
【发布时间】:2011-05-20 09:44:07
【问题描述】:

我有一个 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);
    }

}

【问题讨论】:

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


    【解决方案1】:

    你为什么不使用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);
    }
    

    【讨论】:

    • 好吧,我已经添加了RemoteValidation,现在它调用验证并返回一个值,但是验证消息仍然没有显示......
    • 我有所有的脚本,但是 jquery.min.js 和validation.min.js 中的版本不一样,它现在可以工作了,非常感谢=)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 2018-02-08
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多