ASP.NET MVC Compare ErrorMessage 无效导致无法显示自定义错误信息

前段时间做项目的时候发现,ASP.NET MVC中CompareAttribute的ErrorMessage自定义错误信息设置无效,没有办法显示我们自己定义的错误信息,而是显示默认的错误信息!经过研究发现这是MVC 5.0的一个BUG,现在官方已经修复了这个BUG,只要用NuGet将ASP.NET MVC包升级到5.0以上就可以了。

相关的BUG说明:https://aspnetwebstack.codeplex.com/workitem/1401

项目中View视图的代码:

@using (Html.BeginForm("Register", "Account", FormMethod.Post))
{
    <input type="hidden" name="ReturnUrl" value="@ViewBag.ReturnUrl" />
    <div class="form-group">
        <label>账号:</label>
        @Html.TextBoxFor(m => m.AccountName, new { @class = "form-control", placeholder = "输入账号" })
        @Html.ValidationMessageFor(m => m.AccountName)
    </div>
    <div class="form-group">
        <label>密码:</label>
        @Html.PasswordFor(m => m.AccountPassword, new { @class = "form-control", placeholder = "输入密码" })
        @Html.ValidationMessageFor(m => m.AccountPassword)
    </div>
    <div class="form-group">
        <label>确认密码:</label>
        @Html.PasswordFor(m => m.ConfirmPassword, new { @class = "form-control", placeholder = "再次输入密码" })
        @Html.ValidationMessageFor(m => m.ConfirmPassword)
    </div>
    <div class="form-group">
        <input type="submit" value="注册用户" class="btn btn-success btn-block" />
    </div>

}

Model:

    /// <summary>
    /// 注册视图模型
    /// </summary>
    public class RegisterViewModel
    {
        [XmlElement("账号名称")]
        [Required(ErrorMessage = "请输入账号!")]
        [StringLength(50, ErrorMessage = "账号名称不能超过50个字符!")]        
        public string AccountName { get; set; }

        [XmlElement("账号密码")]
        [Required(ErrorMessage = "请输入密码!")]
        public string AccountPassword { get; set; }
        /// <summary>
        /// 确认密码
        /// </summary>
        [XmlIgnore]
        [Required(ErrorMessage = "请输入确认密码!")]
        [System.ComponentModel.DataAnnotations.Compare("AccountPassword", ErrorMessage = "两次输入的密码不一致!")]
        public string ConfirmPassword { get; set; }
    }

虽然我们在RegisterViewModel类的ConfirmPassword 属性上设置了Compare验证,并且自定义了错误信息"两次输入的密码不一致!",但实际上每当验证没有通过的时候,显示的却是默认的错误信息!

一直显示默认的错误信息

解决ErrorMessage自定义错误设置无效的方法

1、使用NuGet升级ASP.MVC程序包到5.0以上,这是最佳的方法!5.0以上版本已经修复此BUG,本文发布前已经到5.22版本了。

打开NuGet程序包管理器,并打开 更新->nuget.org  查看最新的程序包更新。

查看更新

找到Microsoft ASP.NET MVC 并更新,最好连上面的中文资源也更新下,如果在更新列表没找到只能自己手动输入命令更新了。

选择程序包

更新完成后看下当前的版本,本文发表的时候最新版本是5.22。

升级成功后的版本号


2、在视图界面上重新声明自定义错误信息,这个方法也只是临时的方案:

@Html.ValidationMessageFor(Model => Model.ConfirmPassword, "两次输入的密码不一致")

3、在实体的属性上使用System.Web.Mvc命名空间的CompareAttribute,而不使用System.ComponentModel.DataAnnotations.CompareAttribute:

[System.Web.Mvc.Compare("AccountPassword", ErrorMessage = "两次输入的密码不一致!")]

但是强烈建议不要这么做,因为System.Web.Mvc.CompareAttribute是已经过时的,如果使用了VS会有警告提示!




原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/98377.html

(0)
上一篇 2021年8月21日
下一篇 2021年8月21日

相关推荐

发表回复

登录后才能评论