验证错误未获取本地化字符串

时间:2016-01-25 08:01:43

标签: c# asp.net-mvc validation localization

我在ASP.NET MVC 4中遇到验证错误的问题。

我为一个只接受数字输入的字段应用了RegularExpression规则。如果数据包含任何其他字符,则应显示错误消息。

[RegularExpression("^[0-9]*$", ErrorMessageResourceType = typeof(Resources.General), ErrorMessageResourceName = "CodeMustBeNumeric")]
public string Code { get; set; }

问题是,无论当前的文化设置是什么,它始终显示默认资源而不是本地资源。还有一些细节可供参考。

我的资源:

My resources:

General resource

enter image description here

结果:

enter image description here

如您所见,所有字符串的当前文化都是意大利语,但不是验证错误。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为我做错了,并且有一种开箱即用的解决方法,但是通过更深入的搜索,我发现常见的解决方案只是创建一个自定义验证属性,它来自ASP。 NET一个。

所以我做了,它工作正常。如果有人需要它,这里是:

public class CustomRegularExpressionAttribute : RegularExpressionAttribute
{
    public override string FormatErrorMessage(string name)
    {
        string currentLang = Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName;
        CultureInfo ci = new CultureInfo(currentLang);
        return HttpContext.GetGlobalResourceObject(ErrorMessageResourceType.Name.ToString(), ErrorMessageResourceName, ci).ToString();
    }

    public CustomRegularExpressionAttribute(string pattern)
        : base(pattern)
    {

    }
}

新电话:

[CustomRegularExpression("^[0-9]*$", ErrorMessageResourceType = typeof(Resources.General), ErrorMessageResourceName = "CodeMustBeNumeric")]
public string Code { get; set; }