ASP.NET MVC - 在辅助函数中获取当前控制器和操作名称

10

我正在尝试创建自定义的HTML助手,它将从XML文件中检索一些文本并在视图上呈现它。 XML以层次结构组织,其中顶级节点表示控制器名称,接下来是操作名称,然后是各个键。

目标是实现以下语法:

@Html.Show("Title")

在视图中调用帮助程序时,帮助程序会从中推断控制器名称和操作名称。

有没有一种方法可以在html帮助程序扩展方法中获取那些信息?

3个回答

14

更简单的是:

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

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

分别提供控制器和动作名称。


10
您可以从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);
}

9

这里是操作名称:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接