ASP.NET MVC - 在帮助程序中获取当前控制器和操作名称

Adm*_*vić 9 html-helper asp.net-mvc-3

我正在尝试创建自定义html帮助程序,它将从XML文件中检索一些文本并在视图上呈现它.XML按层次结构组织,其中顶部节点表示控制器名称,遵循操作名称,然后是单个键.

目标是完成语法,例如:

@Html.Show("Title")
Run Code Online (Sandbox Code Playgroud)

帮助程序将从调用它的视图中推断出控制器名称和操作名称.

有没有办法在html帮助扩展方法中获取该信息?

小智 13

更简单:

htmlHelper.ViewContext.RouteData.Values["controller"] 
Run Code Online (Sandbox Code Playgroud)

htmlHelper.ViewContext.RouteData.Values["action"] 
Run Code Online (Sandbox Code Playgroud)

分别为您提供控制器和操作名称.


Abd*_*nim 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);
}
Run Code Online (Sandbox Code Playgroud)


kar*_*una 9

这是动作名称:

ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString()
Run Code Online (Sandbox Code Playgroud)