ASP.NET MVC - получить текущий контроллер и имя действия в помощнике
Я пытаюсь создать пользовательский помощник HTML, который будет извлекать текст из файла XML и отображать его в представлении. XML организован в иерархию, где верхние узлы представляют имена контроллеров, следующие за именами действий, а затем отдельными ключами.
Цель состоит в том, чтобы выполнить синтаксис, такой как:
@Html.Show("Title")
Где помощник будет выводить имя контроллера и имя действия из представления, где он был вызван.
Есть ли способ получить эту информацию в методе расширения вспомогательный HTML?
3 ответа
Вы можете получить текущий контроллер и действие из 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);
}
Еще проще:
htmlHelper.ViewContext.RouteData.Values["controller"]
а также
htmlHelper.ViewContext.RouteData.Values["action"]
дает вам имя контроллера и действия, соответственно.
Вот название действия:
ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString()