2

私はリソースファイルを使用しており、ビューでそれらを標準的な方法で参照していますResources.Labels.CountryName。しかし、リソース名から文字列として C# のリソースの値を取得する必要がある状況があります。

string resourceName = "Resource.Labels.CountryName";

この文字列からリソース ファイルの値を取得するにはどうすればよいですか?

4

1 に答える 1

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")ます。

于 2013-04-07T20:14:10.337 に答える