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

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

2014-12-05 十有三 0 浏览:1万+ .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”已过时

相关文章
  • C#中特殊字符存入MySql报错“ERROR 1366: Incorrect string value“
  • 无法从带有索引像素格式的图像创建 Graphics 对象
  • asp.net mvc 使用XmlWriter输出XML未调用Close方法造成错误
  • 解决Visual Studio Community 2013中文语言包安装失败导致无法使用的问题
  • C# 控制台应用程序从外部传参运行和调试
  • C# List.Join方法

文章分类

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

文章标签

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

热门文章

  • IIS8如何安装和使用URL重写工具-URL Rewrite
  • 林蛋大与楚中天,朱肚皮与朱月坡
  • 解决IE11安装升级失败和在安装前需要更新的问题
  • Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件
  • VS重构重命名的快捷键

推荐文章

  • 解决和分析CSS中z-index属性无效的问题
  • KindEditor禁止用户输入a标签链接以及只允许指定HTML标签输入的方法和技巧
  • 在windows server 2012中实现SQL SERVER EXPRESS自动备份数据库
  • ASP.NET MVC 统一化自定义异常处理方案的选择
  • Visual Studio Community 2013无法折叠代码块

友情链接

  • Passingwind的博客
  • 码友网

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