Я работаю над разделением приложения MVC3 на две области. Существующее приложение входит в одну область (V1), и мы начинаем редизайн во второй области (V2).
У меня все представления, модели, контроллеры и т. Д. Перемещены в папки MyApp \ Areas \ V1 \ xxx, и я смог убедиться, что все загружается, как и должно быть, по большей части. Я переместил всю регистрацию маршрута для V1 в файл V1AreaRegistration.cs и изменил его, чтобы использовать context.MapRoute
вместо RouteTable.Routes.MapRoute
.
Глядя на маршрутизацию с помощью RouteDebugger Фила Хаака, все выглядит хорошо - мои маршруты V2 разрешаются так, как должны, и основные маршруты V1 работают. Что НЕ работает, так это маршруты V1, где у меня есть пользовательский MvcRouteHandler
, определенный следующим образом:
context.MapRoute(
"MyRouteName",
"{myRouteVal}/{controller}/{action}",
new { area = "V1", controller = "DefaultController", action = "Index" },
new { controller = _someRouteConstraint},
new string[] { "My.Custom.Project.WebLibrary.Areas.V1.Controllers" },
_myCustomRouteHandler);
Если я удаляю _myCustomRouteHandler
из этого вызова, он прекрасно работает и отправляет меня к правильному виду в области V1. Когда он установлен, кажется, что маршрутизация игнорирует тот факт, что он зарегистрирован как маршрут по области, и я получаю желтую страницу с сообщением об ошибке:
The view 'Index' or its master was not found or no view engine
supports the searched locations. The following locations were searched:
~/Views/DefaultController/Index.cshtml
~/Views/DefaultController/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml
~/Views/DefaultController/Index.aspx
~/Views/DefaultController/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
Мне нужно иметь возможность использовать обработчик маршрута - он выполняет некоторую работу по проверке параметра {myRoutVal}
и перенаправляет на страницу ошибки, если она недействительна.
Помощь !!