9

XML ファイルからテキストを取得してビューにレンダリングするカスタム html ヘルパーを作成しようとしています。XML は、最上位ノードがコントローラー名を表し、アクション名、個々のキーの後に続く階層に編成されます。

目標は、次のような構文を達成することです。

@Html.Show("Title")

ヘルパーが呼び出されたビューからコントローラー名とアクション名を推測する場所。

HTMLヘルパー拡張メソッドでその情報を取得する方法はありますか?

4

3 に答える 3

9

アクション名は次のとおりです。

ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString()
于 2012-10-31T07:12:56.103 に答える
9

から現在のコントローラーとアクションを取得できますhtmlHelper.ViewContext.RouteData。以下の拡張メソッドを使用して、xml から対応する値を取得します。

//make sure you include System.Xml.XPath, otherwise extension methods for XPath 
//won't be available
using System.Xml.XPath;

public static MvcHtmlString Show(this HtmlHelper htmlHelper,
                                                 string key)
{
    XElement element = XElement.Load("path/to/yourXmlfile.xml");
    RouteData routeData = htmlHelper.ViewContext.RouteData;
    var keyElement = element.XPathSelectElements(string.format("//{0}/{1}/{2}", 
                                                    routeData.GetRequiredString("controller"), 
                                                    routeData.GetRequiredString("action"), 
                                                    key)
                                                ).FirstOrDefault();

    if (keyElement == null)
        throw new ApplicationException(
            string.format("key: {0} is not defined in xml file", key));

    return new MvcHtmlString(keyElement.Value);
}
于 2012-10-31T06:30:38.960 に答える