ASP.NET MVC:ValidationAttribute 和本地化 ErrorMessage

2024-02-12

我有 ValidationAttribute 像:

    public class Username : ValidationAttribute
 {
  public override bool IsValid(object value)
  {
   if (value == null)
    return false;

   return RegExp.Validate(RegExpLib.Username,value.ToString());
  }
 }

..并像这样使用它:

    public class AccountSignIn
 {
  [Username(ErrorMessageResourceName ="txtUsername",ErrorMessageResourceType=typeof(SignIn))]
  public string Username { get; set; }

  public string Password { get; set; }

  public bool RememberMe { get; set; }

  public string ReturnUrl { get; set; }
 }

SignIn 是 App_GlobalResources 中的资源文件,“txtUsername”是资源文件中的字符串名称。

问题: 不显示错误消息。

问题: 如果网站上的语言很少,如何设置错误消息。

另一个信息:

我可以访问SignIn.txtUsername来自视图或项目中的任何文件。来自控制器

ModelState.AddModelError("Username", Resources.SignIn.txtUsername);

工作正常。我可以在 ValidationAttribute 中分配 ErrorMessage,但在第二次验证尝试后出现错误...如果我像这样进行检查 -

if(ErrorMessage != Resources.SignIn.txtUsername)
    ErrorMessage = Resources.SignIn.txtUsername; 

切换到另一种语言后出现错误 - ErrorMessage 只能分配一次。

我该如何解决?


我在使用本地化错误消息和数据注释时遇到了一些问题,与您的情况几乎相同。尽管我最终没有将空白显示为错误消息,但我总是会抛出一些异常。对我来说解决方案是:

  1. 在 App_GlobalResources/Errors.resx 中打开资源文件,将其属性更改为“构建操作:嵌入资源”、“自定义工具:PublicResXFileCodeGenerator”、“自定义工具命名空间:资源”(Visual Studio 在自动生成这些文件时做了一些奇怪的事情,所以请再次检查一切正常)

  2. 将资源文件的访问修饰符更改为 Public

  3. 从生成的代码文件 (Errors.Designer.cs) 检查命名空间和访问修饰符是否正确。

  4. Try it

我的模型类示例:

[Required(ErrorMessageResourceType = typeof(Resources.Errors), ErrorMessageResourceName="ResponseMessageRequired")]
public string message { get; set; }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC:ValidationAttribute 和本地化 ErrorMessage 的相关文章

随机推荐