2012-08-07 5 views
0

Я просматриваю каркас Pro Asp.net mvc3. Я хочу изменить маршрут по умолчанию, чтобы у меня была другая домашняя страница. Я добавил новый контроллер под названием «Страницы» и представление «Главная». Это то, что я хочу, как свою домашнюю страницу.mvc Как изменить маршрут по умолчанию

Я попытался добавив в мой Global.asax.cs

routes.MapRoute("MyRoute", "{controller}/{action}/{id}", 
       new { controller = "Pages", action = "Home", id = "DefautId" }); 

Это изменяет страницу по умолчанию, но он щурит в категории

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 


     routes.MapRoute(null, 
         "", // Only matches the empty URL (i.e. /) 
         new 
          { 
           controller = "Product", 
           action = "List", 
           category = (string) null, 
           page = 1 
          } 
      ); 

     routes.MapRoute(null, 
         "Page{page}", // Matches /Page2, /Page123, but not /PageXYZ 
         new {controller = "Product", action = "List", category = (string) null}, 
         new {page = @"\d+"} // Constraints: page must be numerical 
      ); 

     routes.MapRoute(null, 
         "{category}", // Matches /Football or /AnythingWithNoSlash 
         new {controller = "Product", action = "List", page = 1} 
      ); 

     routes.MapRoute(null, 
         "{category}/Page{page}", // Matches /Football/Page567 
         new {controller = "Product", action = "List"}, // Defaults 
         new {page = @"\d+"} // Constraints: page must be numerical 
      ); 

     routes.MapRoute(null, "{controller}/{action}"); 
    } 

Что я должен сделать, чтобы сделать это Работа?

UPDATE:

URLS: Главная страница идет к списку пунктов

http://localhost/SportsStore/ 

щелкнул категории

http://localhost/SportsStore/Chess?contoller=Product 

контроллер, который ударил для домашней страницы

public class ProductController : Controller 
    { 
     private readonly IProductRepository repository; 
     public int PageSize = 4; 

     public ProductController(IProductRepository repoParam) 
     { 
      repository = repoParam; 
     } 


     public ViewResult List(string category, int page = 1) 
     { 
      var viewModel = new ProductsListViewModel 
           { 
            Products = repository.Products 
             .Where(p => category == null || p.Category == category) 
             .OrderBy(p => p.ProductID) 
             .Skip((page - 1)*PageSize) 
             .Take(PageSize), 
            PagingInfo = new PagingInfo 
                { 
                 CurrentPage = page, 
                 ItemsPerPage = PageSize, 
                 TotalItems = category == null 
                      ? repository.Products.Count() 
                      : repository.Products.Where(
                       e => e.Category == category).Count() 
                }, 
            CurrentCategory = category 
           }; 

      return View(viewModel); 
     } 

контроллер, что я хотел ударить для домашней страницы

public class PagesController : Controller 
{ 
    public ViewResult Home() 
    { 
     return View(); 
    } 

} 

спасибо,

ответ

4

Я был в состоянии заставить его работать так:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(null, "", new {controller = "Pages", action = "Home"}); 

    //routes.MapRoute(null, 
    //    "", // Only matches the empty URL (i.e. /) 
    //    new 
    //     { 
    //      controller = "Product", 
    //      action = "List", 
    //      category = (string)null, 
    //      page = 1 
    //     } 
    // ); 

    routes.MapRoute(null, 
        "Page{page}", // Matches /Page2, /Page123, but not /PageXYZ 
        new {controller = "Product", action = "List", category = (string) null}, 
        new {page = @"\d+"} // Constraints: page must be numerical 
     ); 

    routes.MapRoute(null, 
        "{category}", // Matches /Football or /AnythingWithNoSlash 
        new {controller = "Product", action = "List", page = 1} 
     ); 

    routes.MapRoute(null, 
        "{category}/Page{page}", // Matches /Football/Page567 
        new {controller = "Product", action = "List"}, // Defaults 
        new {page = @"\d+"} // Constraints: page must be numerical 
     ); 


    //routes.MapRoute(null, "{controller}/{action}"); 

    routes.MapRoute(
     "Default", // Route name 
     "{controller}/{action}/{id}", // URL with parameters 
     new {controller = "Pages", action = "Home", id = UrlParameter.Optional} // Parameter defaults 
     ); 

    //routes.MapRoute("MyRoute", "{controller}/{action}", 
    // new { controller = "Pages", action = "Home" }); 

есть лучший способ?

+0

+1 Можете ли вы привести пример Url для маршрутов Route? .MapRoute (null, "", new {controller = "Pages", action = "Home"}); ' –

0

Обязательно поместите маршрут по умолчанию на очень конец сопоставлений маршрута. Если это последний раз, то это никак не может испортить маршрут категорий.

Update Если этот маршрут:

routes.MapRoute(null, "{controller}/{action}"); 

приходит до дефолта, он будет ловить все, что можно было бы ожидать ваш маршрут по умолчанию, чтобы поймать за исключением элементов с параметром третьего URL (ID).

Так, например:

/somepage/home 

поймают на этом маршруте выше, а не используемого по умолчанию.

Таким образом, вы, вероятно, захотите удалить этот маршрут.

+0

это не сработало. дом по умолчанию не изменился – ironman

+0

есть ли что-то, что мне нужно сделать, чтобы mvc знал, что я хочу, чтобы это было по умолчанию? – ironman

+0

Я внес изменения, которые вы указали в своем обновлении, но это тоже не сработало. Он по-прежнему по умолчанию относится к другому, а не к моему новому контроллеру – ironman

1

Первый вариант заключается в использовании этого способа маршрутизации страницы:

routes.MapRoute("Give route a name btw","Page/{page}", // Matches /Page/2 
    new {controller = "Product", action = "List", category = urlParameter.Optional}, 
    new {page = @"\d+"} 
); 

Таким образом, ваши маршруты будут более REST путь.

Другой способ - использовать регулярные выражения маршруты Defining routes using regular expressions

PS: Брус проверить, если эта ссылка на форуме. Было нормально пару дней назад.
PS2: И Фауст прав насчет порядка маршрута.Жадные маршруты продолжаются.
PS3: Можете ли вы написать схему URL, которую хотите реализовать?

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