2010-02-19 2 views
1

я получаю 404 ошибку, когда я перейти к следующему URL-адресу, используя следующую по маршруту:ASP.Net MVC 2 RC2: Пользовательский маршрут возвращает 404, когда все необязательные параметры равны нулю

http://localhost:53999/properties/

Однако все Ниже правильно направляется на Список действия в мой контроллер:

http://localhost:53999/properties/usa/new-york/manhattan/12

http://localhost:53999/properties/usa/new-york/manhattan

http://localhost:53999/properties/usa/new-york

http://localhost:53999/properties/usa

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

    //properties 
    routes.MapRoute(
     "Properties", 
     "Properties/{country}/{state}/{city}/{id}", 
     new 
     { 
      controller = "Properties", 
      action = "List", 
      country = UrlParameter.Optional, 
      state = UrlParameter.Optional, 
      city = UrlParameter.Optional, 
      id = UrlParameter.Optional 
     } 
    ); 

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

В PropertiesController.cs:

public ActionResult List(string country, string state, string city, string id) 
{ 
    return View(); 
} 

Каждый знает, что я не хватает? Похоже, он должен просто перейти к действию по умолчанию, но это явно не ...

ответ

0

Брэд Уилсон ответил на этот пост: http://forums.asp.net/p/1527697/3690295.aspx#3690295

«Нет, проблема в том, что у вас есть папка Свойства на жестком диске, так что это диспетчерская через стандартный диспетчер (не MVC), а затем 404ing потому, что он не может найти документ по умолчанию ».

0

Вместо передачи

(string)null 

попробуйте передать

UrlParameter.Optional 

, как указано в Фил Haacks пост here , Я не знаю, решит ли это проблему, поскольку я не могу ее проверить.

+0

Это не доступно в MVC 1.0. –

+0

Обратите внимание, что UrlParameter.Optional доступен только в MVC 2 RC 2, который был выпущен только в начале февраля. – Brettski

+1

@ çağdaş: ОП конкретно говорит MVC 2. –

2

Вы также можете попробовать следующее (поскольку вы используете MVC 1.0).

Добавить маршрут выше текущий маршрут:

routes.MapRoute(
    "Properties", "Properties", new { controller = "Properties", action = "List"} 
); 

И добавить перегруженный ActionResult List() метод контроллера:

public ActionResult List() 
{ 
    return View(); 
} 
+0

Я тоже думал, что он использовал MVC 1.0 :) Но он говорит MVC 2 в названии. Странно, что мы оба это пропустили. –

+0

Я пробовал это точно так же, как у вас есть, но VS жаловался, что у меня уже был маршрут с именем «Свойства», поэтому я изменил его на «DefaultProperties», чтобы дать ему что-то другое. К сожалению, я все еще получаю 404, когда просто перехожу к localhost: 53999/properties. Однако, как только у меня есть значение для одного из необязательных параметров, он не будет перенаправлен в действие. P.S. Да, я использую MVC 2 RC2 .. –

1

Вы пробовали это Route Debugger от Фила Хаака? Это может помочь вам определить, что происходит.

+0

Спасибо, да, я просто попробовал и, кажется, узнал правильный контроллер и действие, но он все равно выбрасывает 404. Это может быть ошибка, потому что я смог исправить это, изменив ключевое слово ведущего маршрута из «Свойства» на что-либо еще. Может быть, ключевое слово зарезервировано или что-то ... не знаю. Я тестировал все это с помощью другого ключевого ключевого слова routing, и он отлично работает. Странно, но сейчас он работает. :) –

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