Подтвердить что ты не робот

Как перенести существующее приложение asp.net в формат шаблона ASP.NET asp.net

Я хочу перенести существующее приложение ASP.NET в формат шаблона ASP.NET MVC. Какой процедуре я должен следовать? Любые пошаговые инструкции будут очень полезны.

4b9b3361

Ответ 1

Это мое пошаговое руководство, основанное на шагах, которые мы предприняли в моей компании во время нашего перехода от классических ASP.Net Webforms к ASP.Net MVC. Это не идеально, и все еще продолжается, так как мы должны делать это поэтапно из-за размера сайта, но, возможно, кто-то еще найдет и опубликует улучшенный ответ на основе наших результатов.

Этапы: 1. Планирование - переход на MVC из Web Forms в ASP.Net требует тщательного планирования. Ошибка, которую мы совершили в нашем движении, не понимает, что на этот этап планирования, планирования маршрутов и планирования модели/контроллера/действий на самом деле существуют два аспекта. В противном случае это вызовет серьезные проблемы, поскольку вы пытаетесь расширить функциональные возможности своего сайта или нанести более сложные миграции.

Советы: - Посмотрите на свою текущую карту сайта и разработайте улучшенную структуру Sitemap/каталога, которая будет использоваться в приложении ASP.Net MVC. Выясните "язык" для вашего веб-сайта, например. поведение по умолчанию ASP.Net MVC должно состоять из http://sitename/ {controller}/{action}/{id}, но вы можете переопределите это, так как вы получите больше опыта по хакерским правилам маршрутизации.

  • Помните, что по умолчанию каждый контроллер будет перенаправлен через виртуальный подкаталог вашего приложения, например. http://sitename/X будет маршрутизироваться в XController (и по умолчанию его метод Index), http://sitename/Y/Get будет маршрутизироваться к методу YController Get(). Вы можете изменить это, как вам угодно (маршрутизация действительно мощная), но это выходит за рамки этого ответа.

  • Используя существующую карту сайта, укажите, какая папка в структуре MVC должна упасть на каждую текущую страницу .aspx(конечно, сначала спросите, существует ли она вообще).

  • Если сценарии, изображения и т.д. не хранятся вместе или в некоторых папках "зарезервированного имени" в каждом подкаталоге, подумайте об этом сейчас, когда вы перепроектируете. Это значительно упростит ваш дизайн, разрешив вам использовать команду правила маршрутизации Map.IgnoreRoute() в файле Global.aspx.cs, чтобы обойти обработку этих папок в качестве маршрутов.

В нашем случае мы отразили реальный макет подкаталога текущего сайта, где каждый подкаталог стал контроллером, например. /Account будет иметь AccountController,/X будет иметь XController. Все страницы, которые попали внутрь, были заменены действиями внутри каждого контроллера. например http://sitename/profile/about.aspx теперь стал http://sitename/profile/about и сопоставлен с "about" ActionResult метод внутри profileController. Это позволяет нам оставаться гибкими, выполняя частичную миграцию одной или двух каталогов (или нескольких файлов внутри одного каталога) в течение серии спринтов, вместо того, чтобы переносить весь сайт за один раз на гораздо более длительный период.

  1. Создайте новое приложение ASP.Net MVC в Visual Studio и сразу создайте правила в файле Global.asax, которые игнорируют правила маршрутизации для папок, существующих на текущем сайте.

  2. Скопируйте папки из веб-приложения ASP.Net в папки приложений ASP.Net MVC. Запустите веб-сайт и убедитесь, что он работает правильно (он должен, поскольку еще не используются правила маршрутизации).

  3. Выберите подкаталог или подмножество файлов в подкаталоге для переноса.

  4. Для каждой страницы .aspx внутри этого подкаталога:

    а. Сначала создайте свой вид. Я склонен использовать версию браузера, представленную веб-браузером, в качестве базового HTML, а затем помещать заполнители в местах, которые, как мне известно, заполнены динамическими данными.

    б. Используя заполнители для динамических данных, создайте первый проект Модели, используя простые типы данных. Эта модель начнет простую, но будет постоянно реорганизована при переносе большего количества страниц с исходного сайта, поэтому не беспокойтесь, если она начнет выглядеть немного тяжелой. Если вы обнаружите, что слишком много свойств в одной модели по своему вкусу или видите логическую группировку за пределами только определенной модели определенного подмножества элементов, возможно, это знак, который необходимо реорганизовать для того, чтобы вместо этого использовать объект с этими простыми данными типы как свойства, но состоит из уровня бизнес-логики.

    с. Создайте контроллер, если он еще не был создан, и поместите соответствующий метод ActionResult для действия, которое ваше планирование определило, чтобы перейти к этому представлению. Если вы осознаете, что есть новое действие, которое не отображается на страницу со старого сайта, затем создайте представление для контроллера и включите соответствующие теги //TODO: чтобы вы могли отслеживать это, чтобы реализовать после вас мигрировали существующие страницы.

    д. Подумайте о том, чтобы добавить код обработки для неизвестных действий, если у вас нет правила {* catchall} Routing для этого уже в файле global.asax.cs.

    е. Создайте классы конструктора для Модели, чтобы с учетом определенных параметров, которые будет иметь Контроллер (переданных как ваш {id} или, возможно, параметр Request.QueryString из URL-адреса или HTTP-заголовка или файла cookie), Модель будет знать, как обратитесь к своим существующим классам бизнес-логики и создайте для рендеринга View.

    ф. Перейдите на следующую страницу в списке и запустите снова с шага a.

  5. Наконец, создайте правило маршрутизации, которое будет вызывать ваш новый контроллер и разрешить выполняемые вами действия. Отладка, отладка, отладка... Как только вы счастливы, все хорошо, удалите существующую папку и файлы, которые вы перенесли с вашего основного сайта, а также правило IgnoreRoute в файле global.asax.cs.

  6. Создайте перенаправление любым способом, если хотите сохранить старую директорию и имена файлов для обеспечения непрерывности (например, пользователи могут занести в закладки определенные страницы на старом сайте уже).

Примечание. Если вы сохраняете точные имена старых подкаталогов на своем MVC-сайте во время фазы переноса, предпочтительнее перенести весь подкаталог в то время, когда я понял, потому что, делая только несколько файлов, правила маршрутизации вам нужно писать, становясь более сложными, поскольку, если существующая папка существует с тем же именем, что и путь к правилам маршрутизации, и эта папка имеет файл Default.aspx, тогда (/foldername/) будет по умолчанию отображаться страница Default.aspx, так как она принимает меры над правилами маршрутизации.

Совет. Серьезно подумайте об использовании такого инструмента, как RouteDebug для отладки маршрутов, чтобы вы могли найти странные вещи, как указано выше, или когда у вас много маршрутизации правила стрельбы и вызывают неожиданное поведение.

Это мой первый проект, пожалуйста, дайте мне отзыв, если я пропустил какие-либо шаги или увидел какие-либо отверстия в руководстве, и я соответствующим образом отредактирую ответ.

Ответ 2

Я не думаю, что существует такая вещь, как "пошаговая миграция" из ASP.NET WebForms в ASP.NET MVC. Это два совершенно разных шаблона проектирования, построенных на одной и той же структуре, но есть (в большинстве случаев) много вещей, которые нужно не только перемещать, но и полностью перепроектировать, если вы не просто хотите создать веб-сайт приложение в проекте шаблона MVC вместо шаблона WebForms.

Основной причиной этого является разделение проблем, которые намного сложнее в MVC, чем в WebForms. В настоящее время я работаю (ну, я должен быть...) по переносу старого и довольно багги-хобби-проекта из WebForms в MVC, и мой подход в основном "посмотрел на функциональность, перестроил ее с нуля". Конечно, у меня были некоторые вспомогательные методы для форматирования вывода и т.д., Которые я только что включил в свой новый проект, но большинство основных вещей, которые я выбрал, просто полностью переделаны. Вы будете удивлены, как мало мне удается достичь тех же целей с MVC, которые я создал для приложения WebForms полтора года назад, с использованием Entity Framework, jQuery и других сладких вещей, вы сможете получить результаты в течение нескольких часов.

Ответ 3

Пусть эти несколько дополнительных советов помогут

  • Заменить <% - теги комментариев с помощью @*
  • используйте @ RenderSection ( "Нижний колонтитул", false) для нижнего колонтитула @section {} и т.д., если у вас есть дополнительные ContentPlaceHolder, кроме основного тела в представлении, в котором RenderBody().

  • все старые обычные теги runat = "server" безвредны и не препятствуют компиляции и могут быть впоследствии очищены

  • все элементы управления Видимость, которая легко контролируется в коде позади и разметке (Visible = "True" ) и управляется в code_behind с помощью Control Id, должна быть реорганизована в ViewBag Коллекция и @if в режиме Razor.

  • вы также можете посмотреть этот отличный курс Pluralsight вокруг этого тема (3h 49m)

Ответ 4

Мой ответ будет "Ты не делаешь":). Если вы действительно хотите это сделать, вы можете использовать текущий сайт asp.net в качестве конечной цели или в качестве документа требований. И, возможно, вы можете использовать datalayer в своей модели, но вам придется перепроектировать весь сайт.

Как уже указывал Томас, он ОЧЕНЬ отличается от классического asp.net.