我有 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” - 是资源文件中的字符串名称。

问题:
不显示错误消息。

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

另一个信息:

我可以从 View 或项目中的任何文件访问 SignIn.txtUsername。从 Controller
ModelState.AddModelError("Username", Resources.SignIn.txtUsername);

也可以正常工作..我可以在 ValidationAttribute 中分配 ErrorMessage,但是在第二次验证尝试后出现错误......如果我像这样进行检查 -
   if(ErrorMessage != Resources.SignIn.txtUsername)
       ErrorMessage = Resources.SignIn.txtUsername;

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

请建议我如何解决它。

先感谢您。

最佳答案

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

App_GlobalResources/Errors.resx中的

  • 打开资源文件,将其属性更改为Build Action:嵌入式资源,自定义工具:PublicResXFileCodeGenerator,自定义工具命名空间:资源(Visual Studio在自动生成这些文件时做了一些奇怪的事情,因此请再次检查一切正常)
  • 将资源文件的访问修饰符更改为Public
  • 从生成的代码文件(Errors.Designer.cs)中检查 namespace 和访问修饰符是否正确。
  • 试试看

  • 我来自Model类的示例:
    [Required(ErrorMessageResourceType = typeof(Resources.Errors), ErrorMessageResourceName="ResponseMessageRequired")]
    public string message { get; set; }
    

    关于asp.net-mvc - ASP.NET MVC : ValidationAttribute and localized ErrorMessage,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1481376/

    10-09 20:51