2012-10-31 14 views
7

XMLファイルからテキストを取得してビューにレンダリングするカスタムHTMLヘルパを作成しようとしています。 XMLは、上位ノードがアクション名に続いてコントローラ名を表し、次に個々のキーを表す階層構造になっています。ASP.NET MVC - ヘルパーで現在のコントローラとアクション名を取得

ヘルパーは、それが呼ばれたビューからコントローラ名とアクション名を推測するだろう
@Html.Show("Title") 

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

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

答えて

8

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

ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString() 
8

は、アクション名ですあなたはコントローラとアクションNA私、それぞれ。

12

さらに簡単:

htmlHelper.ViewContext.RouteData.Values["controller"] 

htmlHelper.ViewContext.RouteData.Values["action"] 

ができます。ここ

//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); 
} 
関連する問題