2016-10-29 1 views
1

Я реализую маршрутизации в веб-формах:маршрутизации на основе того же параметра (ов) шаблона и различных страниц в веб-формах

Это мои пользовательские технологические карты

public static void MyCustomRoutes(RouteCollection routes) 
     { 
      routes.Ignore("{resource}.axd/{*pathInfo}"); 
      routes.MapPageRoute("NewsByTitle", 
          "{NewsTitle}", 
          "~/News.aspx"); 

      routes.MapPageRoute("BlogsByTitle", 
           "{BlogsTitle}", 
           "~/ViewBlogs.aspx"); 
     } 

В моей странице по умолчанию я имею Блоги и новости, когда я нажимаю на News, он переходит на страницу новостей, как она определена сначала в таблице маршрутизации.

, но когда я нажимаю на Blogs, он берет маршрут новостей только.

Вот мой RedirectToRoute для Blogs и News

Новости:

String Url = clsMethods.GetTileByStoryId(BlogId); //My Url Param 
Response.RedirectToRoute("NewsByTitle", new { NewsTitle = Url }); 

Блоги

String Url = clsMethods.GetTileByStoryId(BlogId); 
    Response.RedirectToRoute("BlogsByTitle", new { BlogsTitle = Url}); 

Update

По Mihir внушения я создал Custom Constraint так что будем решать мою потребность здесь это, как я реализовал Constraint Logic

public static void MyCustomRoutes(RouteCollection routes) 
      { 
       routes.Ignore("{resource}.axd/{*pathInfo}"); 
        routes.MapPageRoute("NewsByTitle", 
          "{NewsTitle}", 
          "~/News.aspx", 
          false, 
          null, 
          new RouteValueDictionary 
       { { "checkNewsRoute", new IsNewsConstraint() } }); 

      routes.MapPageRoute("BlogsByTitle", 
           "{BlogsTitle}", 
           "~/ViewBlogs.aspx", 
           false, 
           null, 
           new RouteValueDictionary 
         { { "checkRoute", new IsBlogConstraint()} }); 

      } 

Вот что Constraint

Блоги Constraint

public class IsBlogConstraint : IRouteConstraint 
    { 
     public bool Match 
      (
       HttpContextBase httpContext, 
       Route route, 
       string parameterName, 
       RouteValueDictionary values, 
       RouteDirection routeDirection 
      ) 
     { 
      return clsMethods.checkRoute(Convert.ToString(values["BlogsTitle"])); 

     } 
    } 

News Co nstraint

public class IsNewsConstraint : IRouteConstraint 
    { 
     public bool Match 
      (
       HttpContextBase httpContext, 
       Route route, 
       string parameterName, 
       RouteValueDictionary values, 
       RouteDirection routeDirection 
      ) 
     { 
      return clsMethods.checkNewsRoute(Convert.ToString(values["NewsTitle"])); 
     } 
    } 

ответ

1

Я думаю, что вы пытаетесь настроить свой маршрут на карте следующий URL шаблона.

  1. Новости: http: //www.website.com/title-of-the-news
  2. Блог: http: //www.website.com/title-of-the-blog

В соответствии с конфигурацией, если вы пытаетесь открыть блог это приведет вас на страницу новостей, которая является правильное поведение, потому что URL в блоге соответствует маршруту новостей.

Чтобы отличить две разные страницы, вам необходимо настроить маршрут с определенным контуром для новостей и блога обоих типов, как я сделал ниже.

routes.MapPageRoute("NewsByTitle", "news/{NewsTitle}", "~/News.aspx"); 
routes.MapPageRoute("BlogsByTitle", "blogs/{BlogsTitle}", "~/ViewBlogs.aspx"); 
  1. Новости: Http: //www.website.com/news/title-of-the-news
  2. Блог: HTTP: //www.website.ком/блог/название-оф-блог

Если вы ищете решение именно вы упомянули в своем вопросе вы должны реализовать ограничение маршрута, как это делается here. Custom Constraints помогают маршрутам, чтобы избежать согласования маршрута, если не согласовано какое-либо пользовательское условие, блог или новости в вашем случае.

В этом ограничении вы можете написать некоторую логику, чтобы проверить, что сегмент пути является новостью или блогом, и возвращает логическое значение. Поэтому, когда ограничение новостей ищет имя блога, оно не будет находить запись в виде новостей (в db) и возвращает false, и этот маршрут будет проигнорирован.

+0

Я реализовал подход ограничения только потому, что мой клиент попросил тот же шаблон URL для блога и новостей, спасибо за то, что вы нашли время и дали решение. – Webruster

 Смежные вопросы

  • Нет связанных вопросов^_^