我正在尝试创建自定义 html 帮助程序,它将从 XML 文件中检索一些文本并将其呈现在视图上。XML 按层次结构组织,其中顶部节点表示控制器名称,然后是操作名称,然后是各个键。
目标是完成语法,例如:
@Html.Show("Title")
助手将从调用它的视图中推断出控制器名称和操作名称。
有没有办法在 html 辅助扩展方法中获取该信息?
我正在尝试创建自定义 html 帮助程序,它将从 XML 文件中检索一些文本并将其呈现在视图上。XML 按层次结构组织,其中顶部节点表示控制器名称,然后是操作名称,然后是各个键。
目标是完成语法,例如:
@Html.Show("Title")
助手将从调用它的视图中推断出控制器名称和操作名称。
有没有办法在 html 辅助扩展方法中获取该信息?
更简单:
htmlHelper.ViewContext.RouteData.Values["controller"]
和
htmlHelper.ViewContext.RouteData.Values["action"]
分别为您提供控制器和操作名称。
您可以从中检索当前控制器和操作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);
}
这是动作名称:
ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString()