/*十有三博客*/
  • 首页
  • 关于本站
  • 网站地图
  • RSS订阅

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

2014-12-05 十有三 0 浏览:6083 .NET技术 ASP.NET MVC

前段时间做项目的时候发现,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会有警告提示!


作者:十有三

出处:https://shiyousan.com/post/635533359699843158

版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。


  • 上一篇: Visual Studio 2013 社区版和速成版之间的区别
  • 下一篇: ASP.NET MVC 出现“System.Web.Mvc.CompareAttribute”已过时

相关文章
  • ASP.NET MVC 统一化自定义异常处理方案的选择
  • Visual Studio Community 2013 微软官方Q&A 英汉翻译对照
  • 解决网站出现GET .woff 404 (Not Found)的问题
  • ASP.NET HTTP 状态字符串无效
  • C#解决IIS域名批量绑定
  • 解析ASP.NET中获取不到用户名及注销后User.Identity.IsAuthenticated值依然为true的原因
发表评论
记住昵称

文章分类

.NET技术 122 数据库 24 Web前端 21 网站建设运维 33 操作系统与应用 67 程序猿日常 11 开发工具 11 其他随笔 13

文章标签

ASP.NET ASP.NET MVC C# CSS HTML IIS Javascript Linux MongoDB MySql SQL SQL Server Visual Studio Windows系统 版本控制系统 插件工具 道学 佛经 服务器 搞笑娱乐 好文分享 软件应用 生活知识 诗词 手机问题 随笔 网络知识 网站设计优化 网站维护 养生保健 异常处理 硬件设备 游戏攻略

热门文章

  • VS重构重命名的快捷键
  • 解决IE11安装升级失败和在安装前需要更新的问题
  • 林蛋大与楚中天,朱肚皮与朱月坡
  • jquery ajax error函数和及其参数详细说明
  • Win10中如何设置Hyper-V的网络让虚拟机也能上外网

推荐文章

  • Ubuntu Server 学习笔记:无法输入密码
  • SQL Server Express不支持维护计划功能
  • MongoDB学习笔记:28663 Cannot start server. The default storage engine 'wiredTiger' is not available
  • Visual Studio 2013 社区版和速成版之间的区别
  • C#中ADO.NET如何传递和设置like查询的参数

最新评论

  • 谢谢了。第一次遇到,以前怎么不会出现这种情况呢,奇
  • 第一种方法解决问题。在开始菜单里重置为默认的推荐浏
  • 使用百度分享按钮动态分享的时候永远默认分享最后一条
  • 使用百度分享按钮动态分享的时候永远默认分享最后一条
  • 非常感谢

友情链接

  • Wil的博客
  • Passingwind的博客
  • 坤哥网
  • .NET开发者社区

知识共享许可协议 CC BY-SA 4.0本站作品采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。
闽ICP备15003702号