首页 > 解决方案 > asp.net core 默认 ErrorMessageResourceName 和 Type

问题描述

我有这堂课:

public class CategoryViewModel
{
    [Required(ErrorMessageResourceName = "RequiredErrorMessage", ErrorMessageResourceType = typeof(Resources)), StringLength(100, ErrorMessageResourceName = "IdStringLengthErrorMessage", ErrorMessageResourceType = typeof(Resources))] public string Id { get; set; }
    [Required(ErrorMessageResourceName = "RequiredErrorMessage", ErrorMessageResourceType = typeof(Resources)), StringLength(255, ErrorMessageResourceName = "StringLengthErrorMessage", ErrorMessageResourceType = typeof(Resources))] public string Name { get; set; }
    [StringLength(255, ErrorMessageResourceName = "StringLengthErrorMessage", ErrorMessageResourceType = typeof(Resources))] public string Image { get; set; }
    public bool Active { get; set; }
}

如您所见,它有来自我的Resources.resx文件的自定义错误消息。我将要创建更多模型,如果我不必为每个模型指定ErrorMessageResourceNameand ,我会喜欢它。ErrorMessageResourceType

我想设置所有必需的属性来使用我的RequiredErrorMessage和我的StringLength属性来使用StringLengthErrorMessage

这可能吗?

标签: c#asp.net-core.net-core

解决方案


如 ASP.NET Core 文档中所述,可以在启动文件中配置数据注释本地化,然后您可以在属性标签内提供错误消息。

1.配置数据注释本地化使用共享资源文件,一个名为SharedResources的虚拟类用于共享资源:

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
                .AddViewLocalization(o => o.ResourcesPath = "Resources")
                .AddDataAnnotationsLocalization(o =>
                 {
                     var type = typeof(SharedResources);
                     var assemblyName = new AssemblyName(type.GetTypeInfo().Assembly.FullName);
                     var factory = services.BuildServiceProvider().GetService<IStringLocalizerFactory>();
                     var localizer = factory.Create("SharedResources", assemblyName.Name);
                     o.DataAnnotationLocalizerProvider = (t, f) => localizer;

                 });
  1. 您可以添加如下资源文件:

在此处输入图像描述

在此处输入图像描述

3.通过相关属性修饰模型的所有属性来修改模型

public class EmuItem
{
    public int Id { get; set; }
    public string SearchName { get; set; }

    [Required(ErrorMessage = "Please enter value for {0}")]
    public string Name { get; set; }

    public int Age { get; set; }
}

结果截图: 在此处输入图像描述

参考:http ://www.ziyad.info/en/articles/16-Localizing_DataAnnotations


推荐阅读