XML ファイルからテキストを取得してビューにレンダリングするカスタム html ヘルパーを作成しようとしています。XML は、最上位ノードがコントローラー名を表し、アクション名、個々のキーの後に続く階層に編成されます。
目標は、次のような構文を達成することです。
@Html.Show("Title")
ヘルパーが呼び出されたビューからコントローラー名とアクション名を推測する場所。
HTMLヘルパー拡張メソッドでその情報を取得する方法はありますか?
XML ファイルからテキストを取得してビューにレンダリングするカスタム html ヘルパーを作成しようとしています。XML は、最上位ノードがコントローラー名を表し、アクション名、個々のキーの後に続く階層に編成されます。
目標は、次のような構文を達成することです。
@Html.Show("Title")
ヘルパーが呼び出されたビューからコントローラー名とアクション名を推測する場所。
HTMLヘルパー拡張メソッドでその情報を取得する方法はありますか?
アクション名は次のとおりです。
ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString()
から現在のコントローラーとアクションを取得できます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);
}