【问题标题】:Resouce in .resx file not visible to MVC code.resx 文件中的资源对 MVC 代码不可见
【发布时间】:2014-08-15 13:23:09
【问题描述】:

我有两个项目的解决方案。一个称为资源,是用于本地化的资源 .resx 文件的集合。另一个是以资源作为参考的 MVC 5 项目。我在名为 EmailAddress 的 .resx 文件中定义了一个新资源,果然它在 Resource.Designer,cs 中:

 internal static string EmailAddress {
            get {
                return ResourceManager.GetString("EmailAddress", resourceCulture);
            }
        }

但是,当我尝试在我的模型类中引用它时,它说它不存在:

[Display(Name = "EmailAddress", ResourceType = typeof(Resources.Resources))]
        [Required(ErrorMessageResourceType = typeof(Resources.Resources),
                  ErrorMessageResourceName = "EmailRequired")]
        [RegularExpression(".+@.+\\..+", ErrorMessageResourceType = typeof(Resources.Resources),
                                         ErrorMessageResourceName = "EmailInvalid")]
        public string EmailAddress { get; set; }

另外,如果我尝试在 Razor 视图中执行此操作,它不会显示在 Intellisense 中:

@Resources.Resources. 

发生了什么事?我还应该说明资源文件最初是从一个示例项目中获取的,并且其中的资源会显示,但我添加的任何资源都没有(但它是设计器 cs 文件)。

【问题讨论】:

  • 确保您的项目引用了您的资源项目。同样在您看来,您需要添加@using 语句,后跟您的项目命名空间
  • 我两者都有,但它仍然找不到我添加的任何内容。 “原始集”就在那里。我在以上面显示的方式运行模型时收到此错误“无法检索属性'名称',因为本地化失败。类型'Resources.Resources'不是公共的或不包含名称为'EmailAddress'的公共静态字符串属性。”
  • 资源的构建操作(在您选择 .resx 文件时在文件属性下)与原始示例中的文件相比是什么?
  • 另外,在编辑 .resx 文件时,访问修饰符是设置为公共还是内部?
  • 它们都设置为内部。我不知道如何改变这一点。也可以在内部使用。

标签: c# asp.net-mvc resx


【解决方案1】:

我有一个非常相似的问题,就我而言,它是通过对这些资源文件做两件事来解决的:

  • 将自定义工具设置为 PublicResXFileCodeGenerator。
  • 将构建操作设置为“嵌入式资源”。
  • 另外在 web.config 中添加了对命名空间部分资源视图的引用。

之后,问题解决了,所以我可以将其称为“@Resources.Resources.EmailAddress

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多