如何从视图和模型访问资源(.resx)文本

时间:2015-06-22 16:21:11

标签: c# asp.net asp.net-mvc asp.net-mvc-4 localization

我是ASP.NET MVC 4的新手,我试图让应用程序使用来自不同国家的资源文件的文本(Resource.en-us.resx,Resource.es-Es.resx)

我曾经有一个LocalResource文件夹,我可以从Model这样访问:

using Concordia_CRM.LocalResource;

[Required]
[Display(Name = "SD_NombreEmpresa", ResourceType = typeof(Resource))]
public string NombreEmpresa { get; set; }

但后来我也读到了一些提及App_LocalResources的答案,我已设法应用这些解决方案来访问VIEW中的文本,但现在不知道如何更改模型以访问它们。

我已阅读问题和答案:

How to use app_GlobalResource or app_LocalResource?

How does the App_LocalResources work with MVC?

但是仍然没有找到一种方法来从VIEW和紧凑且标准的模型访问资源文件的文本

从模型中我尝试了这个

using Concordia_CRM.App_LocalResources <-- but this is not recognized

我可以输入Resources.Resource.但没有其他可用的东西,我不想在每个视图中都有.resx文件

3 个答案:

答案 0 :(得分:1)

打开Resources.resx文件,在顶部有一个组合选择访问修饰符,更改为公共,您将能够通过

访问它们
Resources.STRING1

确保在web.config中有名称空间部分

<pages>
  <namespaces>
    <add namespace="ProjectName.App_LocalResources" />
  </namespaces>
</pages>

在模型类中,您可以访问资源:

 public class model1
{
   [Required(ErrorMessage=App_LocalResources.Resource1.String1)]
    public string MyProp { get; set; }
}

答案 1 :(得分:0)

原来你只需要将这一行添加到任何模型

using Resources;  //<<-- This line

namespace Concordia_CRM.Models
{
    public class SolicitudDemo
    {
        [Required]
        [Display(Name = "SD_NombreEmpresa", ResourceType = typeof(Resource))]
        public string NombreEmpresa { get; set; }

...
}

答案 2 :(得分:0)

Folloing this观点我只为资源文件添加一个单独的项目,并添加对Web应用程序项目的引用。

然后,我不仅会使用我的数据注释,还可以在我的控制器和视图上使用,而无需使用导入或使用语句:

@section scripts {
   <script type="text/javascript">

      $(function () {
         $("#frm").data("CorregirError", "@Resources.CorregirError");
      });

   </script>
}