Самый простой способ получить доступ к RouteData.Values ​​из View - PullRequest
18 голосов
/ 20 мая 2011

Я использую следующий код, чтобы получить текущее «действие» в моем представлении, потому что я хочу создать пользовательскую ссылку на его основе.

ViewContext.RequestContext.RouteData.Values("action")

Моя конечная цель - создать некоторые ссылки действия сJavascript и .js должны знать, каков текущий контроллер и действие, поскольку я хотел бы, чтобы он был гибким.Я нашел вышеупомянутое, просматривая структуру, но я не знаю, нашел ли я правильную вещь.

то есть

var routeData = ViewContext.RequestContext.RouteData;
var linkStub = '/@routeData.Values("controller")/@routeData.Values("action")';

Кто-нибудь знает, является ли это самым простым / самымпростой способ сделать это?

Ответы [ 2 ]

27 голосов
/ 20 мая 2011

самым чистым способом будет метод расширения

public static class MyUrlHelper
{
    public static string CurrentAction(this UrlHelper urlHelper)
    {
        var routeValueDictionary = urlHelper.RequestContext.RouteData.Values;
        // in case using virtual dirctory 
        var rootUrl = urlHelper.Content("~/");
        return string.Format("{0}{1}/{2}/", rootUrl, routeValueDictionary["controller"], routeValueDictionary["action"]);
    }
}
13 голосов
/ 20 мая 2011

Вы получаете данные маршрута от RequestContext, и на самом деле не имеет значения, как вы доберетесь до этого (есть несколько способов).Я не буду беспокоиться о прохождении нескольких объектов (вероятно, это займет всего несколько микросекунд).Вы можете сделать код лучше, либо создав метод расширения (например, url helper), либо сделав соответствующий элемент управления наследующим пользовательскую реализацию WebViewPage, где вы создаете ярлык для того, что вам нужно.Вот так:

public abstract class MyWebViewPage<TModel> : WebViewPage<TModel>
{
    public string ControllerName
    {
        get
        {
            return Url.RequestContext.RouteData.Values["controller"].ToString();
        }
    }

    public string ActionName
    {
        get
        {
            return Url.RequestContext.RouteData.Values["action"].ToString();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...