Объедините ASP.Net MVC с веб-формами
Можно ли создать корневое приложение MVC (портал с мастер-страницами и темами) и добавить пару подпроектов на основе WebForms (у нас уже есть приложение WebForms, которое мы хотели бы интегрировать в портал)?
Как бы вы централизовали навигацию (карты сайта, маршрутизация URL)?
Как бы вы поделились шедеврами?
Как бы вы ссылались на ресурсы (~ вопросы и т. Д.)?
Решения, подобные описанному здесь, выглядят несколько устаревшими
4 ответа
Объединение веб-форм с MVC вполне возможно. См. Это сообщение в блоге Скотта Хансельмана для введения.
- Совместное использование главных страниц: см. Этот вопрос Stackru
- маршрутизация: в ASP.Net 4.0 маршрутизация включена для маршрутов страниц веб-форм (блог Скотту)
Для справки: вчера мне удалось выполнить эту задачу - добавить функциональность MVC на существующий веб-сайт WebForms, то есть - поэтому я подумал, что напишу, если это кому-нибудь пригодится.
Люди говорят: "лучший способ - переписать ваше приложение для веб-форм как MVC", но для этого часто нет бизнес-обоснования, когда приложение хорошо разработано и со временем выросло до настоящего чудовища (это все еще работает хорошо, я мог бы добавить,). В моем случае нас попросили внедрить новую функцию в это приложение - и, поскольку я недавно разрабатывал в MVC другие проекты, я хотел создать эту новую функцию в MVC. Вот что я сделал:
Создайте новое приложение ASP.NET MVC 4 и выберите пустой шаблон (с помощью Razor).
После загрузки щелкните правой кнопкой мыши на References > Browse и затем перейдите в папку Bin моего существующего веб-сайта. Затем я добавил в DLL, которые я использовал на существующем сайте. Для справки, я использую AjaxControlToolkit, поэтому решил добавить последнюю версию NuGet. Это должно затем автоматически обновить файл web.config
Затем я открыл Windows Explorer и перешел в корневую папку моего существующего сайта. Используя Visual Studio, я затем реплицировал структуру папок верхнего уровня существующего сайта (за исключением папки Bin), в результате чего 2 сайта имели одинаковые папки верхнего уровня (но новый проект имел MVC App_Start, Controllers, Models and Views). папки тоже, но не бин, очевидно).
После установки я скопировал подпапки и файлы из соответствующей папки верхнего уровня в проводнике Windows и вставил их в решение. Если вы делаете это так, проект позволяет вам копировать в подпапки и контент напрямую, добавляя существующий элемент через Visual Studio, копируя только файлы, что экономит время. Обратите внимание: для корневой папки я НЕ копировал в web.config или Global.asax, но копировал во все другие файлы (например, default.aspx и т. Д.)
После того, как все содержимое было скопировано, я открыл web.config в новом проекте и web.config на существующем сайте. Я скопировал в новый файл web.config что-то конкретное для существующего сайта (appSettings, connectionStrings, пространства имен, информация о членстве и т. Д.). То же самое относится и к файлам Global.asax.
Я попытался построить и исправить все, что я пропустил.
Как только все было правильно (и я сбил несколько желтых экранов смерти), я заметил, что при загрузке default.aspx я получил ошибку "страница не найдена". Это до маршрутизации, вот изменения, которые я внес в информацию о маршрутизации (находится в Global.ascx MVC 3 или App_Start > RouteConfig.cs MVC 4):
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // This informs MVC Routing Engine to send any requests for .aspx page to the WebForms engine routes.IgnoreRoute("{resource}.aspx/{*pathInfo}"); routes.IgnoreRoute("{resource}.aspx"); // Important change here: removed 'controller = "Home"' from defaults. This is the key for loading // root default page. With default setting removed '/' is NOT matched, so default.aspx will load instead routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { action = "Index", id = UrlParameter.Optional } ); }
После всех этих шагов сайт загрузился и работал как обычно, но теперь у меня есть гибрид ASP.NET WebForms и MVC. Я уверен, что, возможно, есть более простые способы решения этой задачи, но я попробовал другие методы и потерпел неудачу. Этот путь занял у меня около 20 минут, и я начал работать... хорошо сидел и кодировал:)
Отличный ответ выше. Другая вещь, которую вы могли бы рассмотреть, это миграция из ASP.NET в ASP.NET MVC, и в этом случае этот пост может помочь вам перенести файлы проекта.
Я был слишком застрял в этой ситуации, в конце концов я получил решение, которое сработало, в первую очередь скопировать web.config
в папке ваших просмотров.
После этого откройте Route.config(Routeconfig)
файл, там вы найдете один метод RegisterRoutes
сохраните его как есть и создайте другой метод с именем RegisterRoutes2()
и скопируйте и вставьте приведенный ниже код метода из приложения mvc:
public static void RegisterRoutes2(RouteCollection routes)
{...}
в некоторых случаях имя метода в приложении MVC будет RegisterRoutes. Если приведенный выше код не работает, скопируйте и вставьте его из приложения mvc на своем компьютере. Затем перейдите к global.asax
файл, там вы найдете RegisterRoutes()
был назван, просто сейчас, также позвоните RegisterRoutes2()
, И все готово, перезапустите приложение или очистите сборку, оно запустится.