gpt4 book ai didi

asp.net-mvc - asp.net mvc 输入/模型验证多语言

转载 作者:行者123 更新时间:2023-12-02 00:04:31 25 4
gpt4 key购买 nike

我对 ASP.NET MVC 很陌生,并且知道我正在尝试找出答案进行输入验证的好习惯。

在项目中我们将使用 Entity Framework ,您可以在其中添加通过以下方式对属性进行数据注释:

[Required(ErrorMessage = "Please enter a product name")]
[Column]
public string Name { get; set; }

这非常好,但是我们有一个多语言网站(像大多数网站一样),所以我们不能只用英文显示错误消息。有什么办法可以解决这个问题呢?我可以根据用户的语言更改此错误消息@runtime吗?我应该使用 Jquery 客户端验证吗?

感谢您的意见。

更新我已经尝试过 Phil Haack 网站上的代码这可以解决静态资源的问题,但是,我们使用来自数据库的资源而不是静态资源。

如果我填写以下数据注释:

   [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”的可访问静态属性。

当然没有这样的属性,它应该由函数访问。知道我能对此做些什么吗?tnx

最佳答案

您可以从 RequiredAttribute 继承自定义属性并为属性 ErrorMessage 设置您自己的本地化消息。它看起来像这样:

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属性:

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 的自定义验证属性类。

关于asp.net-mvc - asp.net mvc 输入/模型验证多语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3966680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com