【发布时间】:2014-03-11 05:59:50
【问题描述】:
我目前正在使用 MVC4 数据注释来处理验证。我正在开发一个非常国际化的网站,因此我将所有文本都保存在资源文件中。
我还想在资源文件中保留用于验证的正则表达式,以便我可以使用相同的代码进行检查,例如,邮政编码(英国) 和 邮政编码(美国)只需使用不同的 RegEx(以及不同名称的资源等)。
我有以下属性,它已经从资源文件中提取错误消息。我怎样才能让它也从资源文件中获取正则表达式?
[RegularExpression(@"^[\w]{1,2}[0-9]{1,2}[\w]?\s?[0-9]{1,2}[\w]{1,2}$", ErrorMessageResourceType = typeof(Resources.ValidationMessages), ErrorMessageResourceName = "validPostcode")]
编辑(再次)
我现在在哪里
按照下面的答案和一些额外的搜索,我有以下几点:
在Global.asax.cs 中,我添加了以下行以确保调用客户端验证
DataAnnotationsModelValidatorProvider.RegisterAdapter(typeof(LocalisedAttribute), typeof(RegularExpressionAttributeAdapter));
在我的模型中,我调用了属性扩展
[Localised(typeof(Resources.FormValidation), "postcodeRegEx", "postcodeMsg")]
最后,本地化正则表达式验证的属性扩展
public class LocalisedAttribute : RegularExpressionAttribute
{
public LocalisedAttribute(Type resource, string regularExpression, string errorMessage)
: base(GetRegex(regularExpression))
{
ErrorMessageResourceType = resource;
ErrorMessageResourceName = errorMessage;
}
private static string GetRegex(string value)
{
return Resources.FormValidation.ResourceManager.GetString(value);
}
}
这有效,但仅在我第一次在启动应用程序时使用它。
我将提出另一个问题来解决该问题 - 它与原始请求没有直接关系,似乎与大多数人的实施无关,并且似乎并不特定于数据注释。
【问题讨论】:
-
你使用不同的 CultureInfos 吗?
-
不,我不这么认为。
-
我认为如果你想获得本地化资源,你必须决定从哪里获得文化信息名称并进行更改。
标签: asp.net asp.net-mvc asp.net-mvc-4 data-annotations custom-attributes