Westwind.Globalization Framework w / Account.cs ASP.NET MVC

时间:2015-01-16 20:55:14

标签: c# asp.net-mvc globalization westwind westwind-globalization

我在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; }

2 个答案:

答案 0 :(得分:3)

你绝对可以使用Westwind.Globalization和MVC以及验证属性。 MVC验证依赖于强类型资源和类型映射,以便使其工作you have export strongly typed resources from your dbResource file。这将为db资源中的每个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或plain 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视图。

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

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

答案 1 :(得分:2)

Westwind Documentation: Westwind.Globalization ASP.NET MVC Support说:

  

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

所以似乎Westwind没有解决方案,除了使RESX文件编辑可能更容易。

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