Маршрутизация ASP.NET MVC URL на URL с помощью строки запроса - PullRequest
2 голосов
/ 23 мая 2011

Мне нужно сопоставить привлекательный URL-адрес ASP.NET MVC '/ sel / F / 61' с URL-адресом ASPX с параметрами строки запроса, такими как 'familydrilldown.aspx? Familyid = 61'.Я попытался добавить это в global.asax:

routeTable.MapPageRoute(
                "selectorroute", 
                "sel/F/{familyid}", 
                "~/selector/familydrilldown.aspx");

, который работает, за исключением того, что familyid не передается в качестве строки запроса в familydrilldown.aspx.

Как я могу взять {familyid} и передать его в качестве параметра строки запроса на страницу familydrilldown.aspx?

Я пробовал это:

routeTable.MapPageRoute(
                "selectorroute", 
                "sel/F/{familyid}", 
                "~/selector/familydrilldown.aspx?familyid={familyid}");

но, конечно,это на самом деле не работает ...

Есть идеи, как это сделать?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 24 мая 2011

Я нашел решение, реализовав свой собственный IRouteHandler:

public class SelectorRouteHandler<T> : IRouteHandler 
    where T : IHttpHandler, new()
{                                      
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        string queryString = 
            "?familyid=" + requestContext.RouteData.Values["familyid"];

        HttpContext.Current.RewritePath(
            string.Concat("~/selector/familydrilldown.aspx", queryString));

        var page = BuildManager.CreateInstanceFromVirtualPath(
            "~/selector/familydrilldown.aspx", typeof(T)) as IHttpHandler;

        return page;                    
    }
}

и регистрируем его как:

routeTable.Add(
    "selectorRoute", 
    new Route("sel/F/{familyid}", SelectorRouteHandler<Page>()));
0 голосов
/ 23 мая 2011

Я не знаю, возможно ли то, что вы хотите. Почему бы тебе просто не использовать?

var familyId = Page.RouteData.Values["familyid"]

в Page_Load (возможно, задействован какой-либо кастинг)

...