我正在尝试根据foreach变量的值获取国际化的资源值。
我的资源项目名为Resources,我在我的主项目中引用它。
当我想使用它时。只使用这样的内容: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>
}
我做错了什么?
真需要帮助
答案 0 :(得分:0)
首先 - 使用View上的反射是糟糕的风格:) 好像一切都好。您正在从另一个程序集创建ResourceManager。如果它是正确创建的(在调试中查看)并且您可以在debug-watch中查看您的资源 - 尝试检查您的文化,并且您的资源键是为此文化设置的。 ResourceManager根据您的线程文化选择资源字符串。默认情况下,这是您操作系统文化。
来自MSDN:
如果找不到可用的本地化资源集,则为资源管理器 回到默认文化的资源。如果是资源管理器 无法加载默认文化的资源集,该方法抛出一个 MissingManifestResourceException异常,或者,如果资源集是 预计将驻留在卫星装配中,a MissingSatelliteAssemblyException异常。如果是资源管理器 可以加载适当的资源集但无法找到名为的资源 name,该方法返回null。 MSDN article
因此,如果您没有看到异常 - 请检查是否为选择的文化指定了资源键。