2010-02-04 6 views
39

Можно ли создать корневое приложение MVC (Portal с мастер-страницами и темами) и добавить несколько подпроектов на основе WebForms (у нас уже есть существующее приложение WebForms, которое мы хотели бы интегрировать в Портал)?Объединение ASP.Net MVC с WebForms

Как бы вы могли централизовать навигацию (sitemaps, url routing)?
Как бы вы делились основными страницами?
Как бы вы ссылались на ресурсы (~ вопросы и т. Д.)?

Solutions, как один described here кажется несколько устаревшим

ответ

40

Объединение веб-форм с MVC вполне возможно. См. this blog post by Scott Hanselman для введения.

+1

Отличный пост, все ссылки, которые я использовал, когда делали то же самое. – Odd

5

Великий ответ выше. Другая вещь, которую вы могли бы рассмотреть, - это переход с ASP.NET на ASP.NET MVC, и в этом случае this post might help you перенести файлы проекта.

16

Для справки мне удалось выполнить эту задачу вчера - добавьте функциональность MVC к существующему веб-сайту WebForms, то есть - так думал, что я напишу, если он будет кому-то полезен.

Люди говорят: «наилучшим способом является переписать приложение для веб-форм как MVC», но для этого часто не существует бизнес-кейсов, когда приложение хорошо установлено и со временем выросло, чтобы стать довольно монстром (который все еще работает хорошо я мог бы добавить). В моем случае нас попросили внедрить новую функцию в это приложение - и в последнее время она разрабатывалась в MVC для других проектов - я хотел создать эту новую функцию в MVC. Это то, что я сделал:

  1. Создать новую ASP.NET MVC 4 приложения и выбрал пустой шаблон (с Razor)

  2. После загрузки правой кнопкой мыши Ссылки> Просмотрите, а затем перейдите к папке Bin моего существующего веб-сайта. Затем я добавил в DLL, которые я использовал на существующем сайте. Для справки, я использую AjaxControlToolkit, поэтому решил добавить последний из NuGet. Затем это должно автоматически обновить файл web.config

  3. Затем я открыл проводник Windows и перешел в корневую папку моего существующего веб-сайта. Используя Visual Studio, я затем реплицировал структуру каталогов верхнего уровня существующего сайта (минус папка Bin), в результате чего два сайта имели одинаковые папки верхнего уровня (но новый проект с MVC App_Start, контроллерами, моделями и папки просмотра также, но не Bin).

  4. После установки я скопировал подпапки и файлы из соответствующей папки верхнего уровня в проводнике Windows и вставил их в решение. Если вы это сделаете, проект позволяет копировать в подпапки и содержимое напрямую, добавляя существующий элемент через визуальную студию только копии файлов, тем самым экономя время.Обратите внимание: для корневой папки, я НЕ копия в web.config или Global.asax, но копируются во всех других файлах (например, default.aspx и т.д.)

  5. После того, как все содержимое было скопирован, я открыл web.config в новом проекте и web.config на существующем сайте. Я скопировал в новый web.config что-то конкретное для существующего сайта (appSettings, connectionStrings, пространства имен, информация о членстве и т. Д.). То же самое относится к файлам Global.asax.

  6. Я попытался построить и зафиксировать все, что я пропустил.

  7. Как только все было правильно (и я сбил несколько желтых экранов смерти), я заметил, что при загрузке страницы я обнаружил ошибку при загрузке 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 минут, и я начал работать ... хорошо сидел и кодировал :)

0

Я был слишком застрял в этой ситуации, ведь у меня было решение, которое сработало, прежде всего, копию web.config в вашем просмотра.

После этого открытого Route.config(Routeconfig) файла, там вы найдете один метод RegisterRoutes, сохранить его, как это и создать еще один метод с именем RegisterRoutes2() и копировать вставить код, приведенный ниже метод из Mvc приложения:

public static void RegisterRoutes2(RouteCollection routes) 
{...} 

в в некоторых случаях имя метода в приложении mvc будет RegisterRoutes. Если код выше не работает, скопируйте его в приложение mvc вашего устройства. Затем, перейдите к global.asax файла, ther вы найдете RegisterRoutes() был назван, просто сейчас, также позвоните RegisterRoutes2(). И все готово, перезагрузите приложение или очистите его, он будет запущен.

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