我对asp.net mvc很新,而且知道我正试图找出答案
做输入验证的好习惯.
做输入验证的好习惯.
在项目中,我们将使用实体框架,您可以在其中添加
以下列方式对属性进行数据注释:
这很不错,但我们有一个多语言网站(像大多数网站一样),
所以我们不仅可以用英语显示错误信息.
有什么方法可以解决这个问题?我可以根据用户的语言更改此错误消息@runtime吗?
我应该使用Jquery客户端验证吗?
感谢您的投入.
更新我已经尝试了Phil Haack网站上的代码
这将使用静态资源,但是,我们使用来自数据库而非静态资源的资源.
如果我为数据注释填写以下内容:
@H_301_6@[MetadataType(typeof(IncidentsMetaData))] public partial class INCIDENTS { private class IncidentsMetaData { [required(ErrorMessageResourceType = typeof(CustomResourceProviders.DBResourceProviderFactory),ErrorMessageResourceName="1277")] public string SUBJECT { get; set; } } }然后我收到以下错误:
资源类型“CustomResourceProviders.DBResourceProviderFactory”没有名为“1277”的可访问静态属性.
解决方法
您可以从
RequiredAttribute继承自定义属性,并为属性
ErrorMessage设置自己的本地化消息.它可能如下所示:
@H_301_6@public class LocalizedrequiredAttribute : requiredAttribute
{
public LocalizedrequiredAttribute()
: base()
{
// prefix for the selection of localized messages from datebase
// e.x. for "required" string,localized messages will be: "Rurequired","Enrequired"
var currentCulture = CultureInfo.CurrentCulture.TwoLetterISOLanguageName;
// logic to get value from datebase
// e.x. using Linq2sql
using (var context = new dateBaseContext())
{
var query = (from x in context.LocalizedStrings
where x.NameKey == currentCulture + "required"
select x.NameValue).SingleOrDefault();
if (query != null)
{
base.ErrorMessage = query;
}
else
{
base.ErrorMessage = "UndefinedName";
}
}
}
}
您也从DisplayNameAttribute继承并覆盖DisplayName属性:
@H_301_6@public class LocalizedDisplayNameAttribute : DisplayNameAttribute { public LocalizedDisplayNameAttribute(string displayNameKey) : base(displayNameKey) { } public override string DisplayName { get { if (!string.IsNullOrEmpty(base.DisplayName)) { // prefix for the selection of localized messages from datebase // e.x. if DisplayName is "Country",localized messages will be: "RuCountry","EnCountry" var currentCulture = CultureInfo.CurrentCulture.TwoLetterISOLanguageName; // logic to get value from datebase // e.x. using Linq2sql using (var context = new dateBaseContext()) { var query = (from x in context.DisplayNames where x.DisplayNameKey == currentCulture + base.DisplayName select x.DisplayNameValue).SingleOrDefault(); if (query != null) { return query; } return base.DisplayName; } } return "UndefinedName"; } } }您还可以创建继承自ValidationAttribute类的自定义验证属性.