Что ж, мне кажется, что если вы вызываете представление из определенного контроллера, было бы довольно просто построить путь из того, что вы уже знаете. Если вам это нужно в представлении, вы можете просто передать его, используя запись ViewData.
Итак, если вы делаете
http://localhost/myarea/mycontroller/myaction
тогда контроллер, которому вы звоните, уже знает myarea, mycontroller и myaction. Я предполагаю, что вы создаете либо частичное представление, либо Html вспомогательный метод для обработки меню, поэтому при рендеринге представления передайте myarea, mycontroller и myaction в представление как переменные ViewData. По вашему мнению, передайте эти переменные в ваш частичный вид или метод Html-помощника.
Или вы можете построить свой путь из myarea, mycontroller и myaction и вместо этого протолкнуть весь путь в ваше представление.
Использование:
<%= Html.Menu(ViewData["Area"], ViewData["Controller"], ViewData["Action"]) %>
Пример функции для расчета пути:
string GetPath(string area, string controller, string action)
{
return "/project/areas/" + area + "/" + controller + "/" + action
}
РЕДАКТИРОВАТЬ: Как указал Крейг Штунц, вы можете получить значения маршрута в представлении (через ViewContext) без необходимости сначала помещать их в ViewData. Это означает, что вы можете построить свой путь непосредственно с помощью метода расширения меню, при условии, что вы можете получить area таким же образом. Я не уверен, поддерживает ли Фил материал или нет.
ViewContext.RouteData.Values["controller"].ToString()
ViewContext.RouteData.Values["action"].ToString()