私はリソースファイルを使用しており、ビューでそれらを標準的な方法で参照していますResources.Labels.CountryName
。しかし、リソース名から文字列として C# のリソースの値を取得する必要がある状況があります。
string resourceName = "Resource.Labels.CountryName";
この文字列からリソース ファイルの値を取得するにはどうすればよいですか?
私はリソースファイルを使用しており、ビューでそれらを標準的な方法で参照していますResources.Labels.CountryName
。しかし、リソース名から文字列として C# のリソースの値を取得する必要がある状況があります。
string resourceName = "Resource.Labels.CountryName";
この文字列からリソース ファイルの値を取得するにはどうすればよいですか?
通常、リソースを取得するには
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")
ます。