Подтвердить что ты не робот

Самый простой способ доступа к RouteData.Values ​​из представления

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

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

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

то есть.

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

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

4b9b3361

Ответ 1

Самый чистый способ - это метод расширения

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"]);
    }
}

Ответ 2

Вы получаете данные маршрута от RequestContext, и на самом деле не имеет значения, как вы к этому относитесь (существует несколько способов). Я бы не стал беспокоиться о том, чтобы пройти через несколько объектов (возможно, всего несколько микросекунд). Вы можете сделать код лучше, либо путем создания метода расширения (например, помощника URL-адреса), либо для того, чтобы рассматриваемый элемент наследовал пользовательскую реализацию 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();
        }
    }
}