Ошибка ASP.NET MVC 3 RC2?

До сих пор я использовал ASP.NET MVC 3 BETA. Все работало нормально до обновления до версии RC2. Конечно, я читал Статья ScottGu о RC2.

Моя проблема следующая. В основном у меня 2 контроллера:

   public class DynamicPageController : Controller
   {          
      public ActionResult Redirect(string resource, int? pageNumber, int? id)
      {       
      }
   }

   public class SystemController : Controller
   {
      public ActionResult Index()
      {
      }
   }

В Globals.asax у меня есть такие маршруты:

   public static void RegisterRoutes(RouteCollection routes)
   {
         routes.MapRoute(
            "SystemRoute",
            "System/{action}",
            new { controller = "System", action = "Index" }
            );

         routes.MapRoute(
            "PageRoute",
            "{resource}/{id}/{pageNumber}",
            new { controller = "DynamicPage", action = "Redirect", resource = UrlParameter.Optional, pageNumber = UrlParameter.Optional, id = UrlParameter.Optional }
            );
   }

В коде у меня есть простое создание ссылки:

System.Web.Mvc.UrlHelper u = new System.Web.Mvc.UrlHelper(context);
string url = u.Action("Index", "System");

и URL-адрес "/ my_app / System" в обеих версиях (БЕТА и RC2)

Но код ниже (синтаксис такой же, как и выше, только имена контроллера и действия отличаются):

string url = u.Action("Redirect", "DynamicPage", new RouteValueDictionary(new { resource = "Home" }));

дает URL-адрес, который в RC2 равен нулю. Это должно быть (а на самом деле в БЕТА-версии было) "/ my_app / Home"

Почему ? Это ошибка? Как я могу создать URL-адрес для своего контроллера «DynamicPage»?

С Уважением

Кстати: Откуда я теперь могу загрузить бета-версию ASP.NET MVC вместе с установщиками ASP.NET Web Pages 1.0? С момента анонса RC2 у меня возникли проблемы с поиском упомянутых двух установщиков. Обычно я обновляю свой код, но эта проблема, описанная выше, заставляет меня оставаться с бета-версией на некоторое время, так как у меня сейчас нет времени на миграцию и тестирование всего.

ОБНОВЛЕНИЕ

Решение, которое я использовал для случая, когда у меня есть два дополнительных параметра, существующих один за другим, - это добавить новый маршрут PageRouteCore непосредственно перед существующим маршрутом PageRoute:

routes.MapRoute(
            "PageRouteCore",
            "{resource}",
            new {controller = "DynamicPage", action = "Redirect"}
            );

По сути, это тот же маршрут, но без дополнительных параметров. Создание URL-адреса теперь ведет себя так, как я ожидал.


person jwaliszko    schedule 23.12.2010    source источник


Ответы (1)


Да, это ошибка.

Также вы можете загрузить ASP.NET MVC RC1 отсюда.

person Darin Dimitrov    schedule 23.12.2010
comment
Привет, спасибо за повтор, но, к сожалению, это исправление НЕ решило мою проблему. Mabye это что у меня еще одна ошибка? - person jwaliszko; 23.12.2010
comment
@Jarek, теперь, когда я более внимательно смотрю на ваши маршруты и способ создания URL-адреса, вы никогда не указываете параметр id (вы указали только параметр resource). В ваших маршрутах вы указали, что часть {id} является необязательной, но это невозможно, потому что только последняя часть маршрута может быть необязательной (в вашем случае это будет pageNumber). IIRC в RC2 они применили это правило, поэтому я бы сказал, что это имеет смысл. Это не ошибка. Ваши маршруты должны быть исправлены. - person Darin Dimitrov; 23.12.2010
comment
можешь объяснить мне, почему они это сделали? Почему у меня не может быть 2 или более необязательных параметров? - person jwaliszko; 27.12.2010
comment
Я понимаю это, но мне интересно, почему нельзя предположить, что если есть 2 необязательных параметра, а в URL-адресе указан только один, предоставленный параметр является первым из определения маршрута? Предположим, маршрут выглядит как foo / {a} / {b}. Когда URL-адрес foo / 1 или foo / 2, можно предположить, что в первом случае a = 1, а во втором a = 2. То же правило может быть правильным для большего количества параметров - выбранные последующие необязательные параметры назначаются значениям из url. В этом есть смысл, не так ли? - person jwaliszko; 28.12.2010