如何从它的字符串名称中获取资源的值

时间:2013-04-07 20:07:57

标签: c# localization resource-files

我一直在使用资源文件并以标准方式在我的视图中引用它们,例如Resources.Labels.CountryName。但我有一种情况,我需要从资源名称中获取C#中资源的值作为字符串,即

string resourceName = "Resource.Labels.CountryName";

如何从此字符串中获取资源文件中的值?

1 个答案:

答案 0 :(得分:2)

通常您可以使用

获取资源
GetLocalResourceObject("~/VirtualPath", "ResourceKey");
GetGlobalResourceObject("ClassName", "ResourceKey");

你可以改编一下。我为HTML帮助器编写了自己的扩展,就像这个全局资源一样:

public static string GetGlobalResource(this HtmlHelper htmlHelper, string classKey, string resourceKey)
{
    var resource = htmlHelper.ViewContext.HttpContext.GetGlobalResourceObject(classKey, resourceKey);
    return resource != null ? resource.ToString() : string.Empty;
}

我认为,在您的示例中,您可以使用@Html.GetGlobalResource("Labels", "CountryName")在视图中获取资源。

因为本地资源需要虚拟路径而我不想将其写入视图,所以我使用这种组合,这给了两个机会:

public static string GetLocalResource(this HtmlHelper htmlHelper, string virtualPath, string resourceKey)
{
    var resource = htmlHelper.ViewContext.HttpContext.GetLocalResourceObject(virtualPath, resourceKey);
    return resource != null ? resource.ToString() : string.Empty;
}

public static string Resource(this HtmlHelper htmlHelper, string resourceKey)
{
    var virtualPath = ((WebViewPage) htmlHelper.ViewDataContainer).VirtualPath;
    return GetLocalResource(htmlHelper, virtualPath, resourceKey);
}

通过在视图中编写@Html.Resource("Key"),您可以获得非常舒适的本地资源。或者使用第一种方法获取其他视图的本地资源,例如@Html.GetLocalResource("~/Views/Home/AnotherView.cshtml", "Key")