在视图ASP.NET C#中从另一个项目获取局部变量的资源

时间:2016-03-14 20:53:21

标签: c# asp.net-mvc internationalization resourcemanager

我正在尝试根据foreach变量的值获取国际化的资源值。

我的资源项目名为Resources,我在我的主项目中引用它。

reference properties

当我想使用它时。只使用这样的内容:Resources.resourceKey

问题

现在我需要使用它,但resourceKey在循环中的变量

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => Resources.item.Rating)
        </td>
    </tr>
}

这显然不起作用,在Resources中没有任何键名为item

我的解决方案(不工作)

创建资源管理器并尝试获取字符串

@{
    System.Reflection.Assembly resourcesAssembly;
    resourcesAssembly = System.Reflection.Assembly.Load("Resources");

    System.Resources.ResourceManager rm = new
       System.Resources.ResourceManager(resourcesAssembly.FullName,
       resourcesAssembly);
}

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => rm.GetString(item.Rating))
        </td>
    </tr>
}

我做错了什么?

真需要帮助

1 个答案:

答案 0 :(得分:0)

首先 - 使用View上的反射是糟糕的风格:) 好像一切都好。您正在从另一个程序集创建ResourceManager。如果它是正确创建的(在调试中查看)并且您可以在debug-watch中查看您的资源 - 尝试检查您的文化,并且您的资源键是为此文化设置的。 ResourceManager根据您的线程文化选择资源字符串。默认情况下,这是您操作系统文化。

来自MSDN:

  

如果找不到可用的本地化资源集,则为资源管理器   回到默认文化的资源。如果是资源管理器   无法加载默认文化的资源集,该方法抛出一个   MissingManifestResourceException异常,或者,如果资源集是   预计将驻留在卫星装配中,a   MissingSatelliteAssemblyException异常。如果是资源管理器   可以加载适当的资源集但无法找到名为的资源   name,该方法返回null。   MSDN article

因此,如果您没有看到异常 - 请检查是否为选择的文化指定了资源键。