【问题标题】:Westwind.Globalization Framework w/ Account.cs ASP.NET MVCWestwind.Globalization 框架 w/ Account.cs ASP.NET MVC
【发布时间】:2015-01-16 20:55:13
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您绝对可以将 Westwind.Globalization 与 MVC 和验证属性一起使用。 MVC 验证依赖于强类型资源和类型映射,所以为了让它工作you have export strongly typed resources from your dbResource file。这将为您的数据库资源中的每个 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 视图,该视图使用具有本地化值的视图。

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

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

    【讨论】:

      【解决方案2】:

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

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

      所以西风似乎没有解决办法,除了让 RESX 文件编辑可能更容易。

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 2011-02-20
      • 2020-05-26
      • 2010-09-25
      • 2011-01-06
      相关资源
      最近更新 更多