加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 04:16:53 所属栏目:asp.Net 来源:网络整理
导读:我对asp.net mvc很新,而且知道我正试图找出答案 做输入验证的好习惯. 在项目中,我们将使用实体框架,您可以在其中添加 以下列方式对属性进行数据注释: [Required(ErrorMessage = "Please enter a product name")][Column]public string Name { get; set; }
我对asp.net mvc很新,而且知道我正试图找出答案
做输入验证的好习惯.

在项目中,我们将使用实体框架,您可以在其中添加
以下列方式对属性进行数据注释:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读