До сих пор я использовал 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-адреса теперь ведет себя так, как я ожидал.