0

我在 Account.CS 文件中声明资源时遇到问题。这是我的代码:

    [Required(ErrorMessageResourceName= typeof @DbRes.T("Account", "EmailAddress")]
    [Required(ErrorMessageResourceName = (@DbRes.T("EmailAddress", "Account")))]
    [DataType(DataType.EmailAddress)]
    [Display(Name = DbRes.T("EmailAddress", "Account"))]
    public string EmailAddress { get; set; }
4

2 回答 2

3

您绝对可以将 Westwind.Globalization 与 MVC 和验证属性一起使用。MVC 验证依赖于强类型资源和类型映射,因此为了使其工作,您必须从 dbResource 文件中导出强类型资源。这将为您的数据库资源中的每个 ResourceSet 创建一个自定义强类型类。

强类型资源类如下所示:

public class Resources
{
    public static System.String NameIsRequired
    {
        get
        {
            if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.AspNetResourceProvider)
                return (System.String) HttpContext.GetGlobalResourceObject("Resources","NameIsRequired");
            if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.Resx)
                return ResourceManager.GetString("NameIsRequired");

            return DbRes.T("NameIsRequired","Resources");
        }
    }


    public static System.String AddressIsRequired
    {
        get
        {
            if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.AspNetResourceProvider)
                return (System.String) HttpContext.GetGlobalResourceObject("Resources","AddressIsRequired");
            if (GeneratedResourceSettings.ResourceAccessMode == ResourceAccessMode.Resx)
                return ResourceManager.GetString("AddressIsRequired");

            return DbRes.T("AddressIsRequired","Resources");
        }
    }

    ... any others in the same resource set
}

这与标准 .Resx 强类型类非常相似,不同之处在于您可以使用同一个类(DbRes ResourceManager、dbRes ASP.NET ResourceProvider 或普通 Resx)访问各种不同类型的资源。

然后,您可以像在 ASP.NET MVC 模型验证属性中引用标准 Resx 强类型资源一样引用强类型资源:

public class ViewModelWithLocalizedAttributes
{
    [Required(ErrorMessageResourceName = "NameIsRequired", ErrorMessageResourceType = typeof(Resources))]
    public string Name { get; set; }

    [Required(ErrorMessageResourceName = "AddressIsRequired", ErrorMessageResourceType = typeof(Resources))]
    public string Address { get; set; }
}

示例项目中有一个示例 - 打开 Models 文件夹以查看模型和 ModelAttributesFromResources.cshtml 视图,该视图使用具有本地化值的视图。

wiki 上有一个主题也描述了这一点:

https://github.com/RickStrahl/Westwind.Globalization/wiki/Model-Validation-Message-for-ASP.NET-and-EntityFramework

于 2015-03-16T05:58:36.250 回答
2

Westwind 文档:Westwind.Globalization ASP.NET MVC 支持说:

MVC 应用程序最好不使用 App_LocalResources 和 App_GlobalResources 的 ASP.NET 资源体系结构。因为 MVC 不使用控件,所以基于 Web 窗体的提供程序系统提供的声明性标记的任何控件查找优势在 MVC 应用程序中都丢失了。相反,MVC 应用程序往往最适合使用在 .NET 项目中定义并作为强类型资源公开的传统资源。

所以似乎 Westwind 没有解决方案,除了让 RESX-File 编辑可能更容易。

//编辑: 请参阅 Ricks 评论:[...]您可以从 db 资源生成强类型资源,然后以相同的方式使用它们。[...] Wiki上有一个单独的主题。

于 2015-01-26T14:26:15.927 回答