Маршрутизация веб-форм .NET 4.0 с несколькими маршрутами - PullRequest
1 голос
/ 15 октября 2011

У меня нет опыта работы с маршрутизацией, поэтому, если я не использую это правильно, пожалуйста, дайте мне знать.

У меня создано 3 маршрута: LocationPages, ServicePages и StaticPages.Я разбил их на 3 маршрута, потому что они хранятся в 3 таблицах в БД.Моя проблема заключается в том, что содержимое страницы default.aspx для LocationPages и ServicePages хранится в таблице StaticPages, поскольку не имеет той же структуры, что и текущая страница местоположения или страницы службы.

Моя проблема заключается в том, чтопри переходе на domain.com/locations/ маршрут LocationPages забирает его, когда должен быть маршрут StaticPages, и то же самое для страниц обслуживания.Он подхватывает его, потому что маршрут для страниц местоположения - domain.com/locations/cityname/.

Я попытался использовать Response.RedirectToRoute ("StaticPages") в том случае, если не удается найти страницу местоположения, поэтомустатическая маршрутизация страниц может обработать его и запросить страницу местоположения по умолчанию или отправить на 404. Однако каждый раз, когда параметр маршрута равен нулю.

Вот мой код и маршруты:

void RegisterRoutes(RouteCollection routes)
{
    routes.Ignore("{resource}.axd/{*pathInfo}");
    routes.MapPageRoute("LocationPages", "Locations/{*RouteLocation}", "~/LocationRouteHandler.aspx");
    routes.MapPageRoute("ServicePages", "Services/{*RouteService}", "~/ServiceRouteHandler.aspx");
    routes.MapPageRoute("StaticPages", "{*RoutePage}", "~/default.aspx");

}

Обработчик маршрута местоположения:

protected void GetLocationPage()
{
    try
    {
        string RouteLocation = Page.RouteData.Values["RouteLocation"] as string;

        if (RouteLocation.EndsWith("/"))
            RouteLocation = RouteLocation.TrimEnd('/');

        AccessLocation location = new AccessLocation();
        lpd = location.GetLocationDetailByRouteLocation(RouteLocation);

        if (lpd != null)
        {
            if (lpd.LocationPage.Active == false)
                Response.Redirect("~/Error/404.aspx");
        }
        else
            Response.Redirect("~/Error/404.aspx");
    }
    catch
    {
        Response.RedirectToRoute("StaticPages");
        Response.End();
    }
}

Обработчик маршрута статической страницы:

protected void GetContentPage()
{
    try
    {
        string RoutePage = Page.RouteData.Values["RoutePage"] as string;

        if (string.IsNullOrEmpty(RoutePage))
            RoutePage = "Home";

        if (RoutePage.EndsWith("/"))
            RoutePage = RoutePage.TrimEnd('/');

        AccessContent content = new AccessContent();
        cpd = content.GetContentDetailByRoutePage(RoutePage);

        if (cpd != null)
        {
            if (cpd.ContentPage.Active == false)
                Response.Redirect("~/Error/404.aspx");
        }
        else
            Response.Redirect("~/Error/404.aspx");
    }
    catch
    {
        Response.Redirect("~/Error/404.aspx");
    }
}

КогдаЯ отлаживаю, я вижу, что это входит в метод статической страницы, но переменная RoutePage всегда нулевая.

Спасибо за помощь!

...