我一直在使用资源文件并以标准方式在我的视图中引用它们,例如Resources.Labels.CountryName
。但我有一种情况,我需要从资源名称中获取C#中资源的值作为字符串,即
string resourceName = "Resource.Labels.CountryName";
如何从此字符串中获取资源文件中的值?
答案 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")
。