Как использовать Control.GetRouteUrl из класса в App_Code - PullRequest
5 голосов
/ 10 мая 2011

Я использую маршрутизацию в веб-формах asp.net 4.0 с некоторым успехом.На своих страницах я использую Page.GetRouteURL для генерации таких маршрутов.

<a href = '<%=GetRouteUrl("MyRoute", new {MyFirstRouteValue = "ABC", MySecondRouteValue=123}) #>' >Link Text</a>

Это прекрасно работает, но я обнаружил, что бывают моменты, когда мне нужна эта функциональность в классе в app_code.Я мог бы просто вручную построить маршрут с помощью String.Format, но это немного неаккуратно, поскольку он дублировал бы код в Global.asax, который определяет маршруты.

Конечно, в классе App_Code нет объекта Page, поэтому я не могу просто вызвать GetRouteUrl.Просматривая в документах на MSDN , я вижу кое-что, что выглядит полезным.

Этот метод предназначен для удобства кодирования.Это эквивалентно вызову метода RouteCollection.GetVirtualPath (RequestContext, String, RouteValueDictionary).

Поэтому я проследовал за документами по этой странице , в которой говорится, что System.Web.Routing.GetVirtualPath () требует объект System.Web.Routing.RequestContext.Я знаю об объекте HttpContext, но не могу понять, что такое RequestContext.Кому-нибудь повезло с этим?

1 Ответ

9 голосов
/ 10 мая 2011

RequestContext доступно как свойство для объекта HttpRequest, поэтому вы можете ссылаться на него как HttpContext.Current.Request.RequestContext.Например,

public string GetRouteUrl(string routeName, object routeParameters)
{
   var dict = new RouteValueDictionary(routeParameters);
    var data = RouteTable.Routes.GetVirtualPath(HttpContext.Current.Request.RequestContext, routeName, dict );
    if (data != null)
    {
        return data.VirtualPath;
    }
    return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...