Запуск ASP.NET Webforms и ASP.NET MVC бок о бок

В настоящее время я работаю над веб-проектом, который создается с использованием веб-форм ASP.NET. Мы хотим начать создавать новые страницы с использованием среды MVC.

Похоже, что запуск MVC и веб-форм бок о бок выполним http://weblogs.asp.net/rajbk/archive/2010/05/11/running-asp-net-webforms-and-asp-net-mvc-side-by-side.aspx

Мне любопытно, есть ли какие-либо проблемы или проблемы, которые мне нужно планировать.

Я запускаю ASP.NET 4.0 и планирую использовать MVC3.

Ответ 1

Я использовал Webforms и MVC для внутреннего приложения здесь. Это началось как приложение для веб-форм, и я перенес его в MVC2 (затем 3) с несколькими частями, которые все еще успешно работают с Webforms.

Как сказал Дарин, основная проблема будет заключаться в шаблонах. Если вы используете WebView View Engine, вам нужно создать 2 слоя мастер-страниц. Код Webforms (например, менеджер script) не запускается на страницах MVC, а код MVC не работает на страницах Webforms.

Мои мастер-страницы настроены с глобальной главной страницей, которая не содержит код MVC или Webforms. Он имеет только CSS, глобальный javascript и основной макет. Затем у меня есть главная страница MVC и главная страница веб-форм, у обоих есть директивы, которые используют глобальную главную страницу в качестве их главных страниц. Затем каждая страница веб-форм использует субмастерную страницу Webforms, а MVC использует субмастерную страницу MVC.

Если вам нужно поместить некоторый код на глобальную главную страницу, вы можете определить, является ли подстраница страницей Webforms или MVC, проверяя, есть ли Page is System.Web.Mvc.ViewPage. Если это true, то это страница MVC, иначе это страница Webforms.

Однако, если вы решите пойти с движком просмотра Razor (который я рекомендую для MVC, это намного лучше), это становится сложнее. Вы должны сделать некоторые дополнительные работы вокруг того, что я упоминал ранее. Это сообщение в блоге должно помочь в этом отношении.

Ответ 2

В дополнение к что сказал Дарин, постарайтесь не использовать механизм просмотра WebForms, если вы можете помочь ему и создать правильные URL-маршруты, чтобы страницы, которые должны обрабатываться WebForms по-прежнему обрабатываются WebForms.

Ответ 3

Единственное, что я могу придумать, - это соблазнить повторного использования существующего кода WebForms в части MVC и в конечном итоге с DataSets в действие вашего контроллера или (возможно, не дай Бог) в ваши взгляды:-) Еще один вопрос с повторное использование такого кода заключается в том, что вы должны быть очень осторожны, чтобы не оказаться в тэгах MVC в runat="server". Я бы поставил обе части как можно более слабо связанные. И из-за этого я не буду смешивать их в один проект: -)

Ответ 4

Я думаю, это зависит от того, какое взаимодействие будет происходить между WebForms и частями MVC сайта. Если оба пользователя используют один и тот же фоновый код и тот же журнал безопасности, тогда вы должны быть в порядке. У вас могут возникнуть проблемы, если необходимо сотрудничать с веб-формой и действием MVC. Как я уже сказал, все зависит от того, каким будет взаимодействие. Если они работают бок о бок, но оставляют друг друга в покое, то вы должны быть в порядке.

Одна из проблем, которые могут возникнуть, - это переход мышления, необходимый для перехода от WebForms к MVC и наоборот, хотя опыт и практика научат вас здесь.

Ответ 5

Я предлагаю разделить два приложения и предоставить им разные поддомены, вы можете сохранить их в одном субдомене с помощью виртуального каталога, но мне не понравился этот подход.

Вы можете использовать один файл cookie для проверки в обоих приложениях, используя ключ validationKey и decryptionKey.

Таким образом, ваши базы кода не смешиваются, и вы не боретесь с проблемами с конфигурационными файлами.

Я разместил более длинное описание этого подхода.