Что такое «жизненный цикл страницы» страницы ASP.NET MVC по сравнению с веб-формами ASP.NET? - PullRequest
157 голосов
/ 20 января 2009

Что такое «жизненный цикл страницы» страницы ASP.NET MVC по сравнению с веб-формами ASP.NET?

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

Либо «преобразование» процесса, описанного ниже, либо альтернативный жизненный цикл - это то, что я ищу.

Что я сейчас делаю:

(да, я знаю, что любой, кто способен ответить на мой вопрос, уже знает все это - я просто пытаюсь получить сравнение «жизненного цикла», поэтому я подумал, что начну с того, что мы уже все знают)

Отображение страницы:

  • У меня есть главная страница, которая содержит мой основной шаблон
  • У меня есть страницы контента, которые дают мне именованные регионы из главной страницы, в которую я помещаю контент.
  • В обработчике событий для каждой страницы содержимого я загружаю данные из базы данных (в основном только для чтения).
  • Я связываю эти данные с элементами управления ASP.NET, представляющими сетки, выпадающие списки или повторители. Все эти данные «живут» внутри сгенерированного HTML. Часть этого попадает в ViewState (но я не буду вдаваться в это слишком много!)
  • Я устанавливаю свойства или привязываю данные к определенным элементам, таким как элементы управления Image или TextBox на странице.
  • Страница отправляется клиенту в формате HTML, который нельзя использовать повторно.
  • Я стараюсь избегать использования ViewState, отличного от того, что требуется странице как минимум.

Клиентская часть (без использования ASP.NET AJAX):

  • Я могу использовать JQuery и некоторые неприятные трюки, чтобы найти элементы управления на странице и выполнить над ними операции.
  • Если пользователь выбирает из выпадающего списка - генерируется постбэк, который вызывает событие C # в моем коде. Это событие может попасть в базу данных, но, что бы он ни делал, полностью сгенерированная HTML-страница в конечном итоге отправляется обратно клиенту.
  • Я могу использовать Page.Session для хранения пар ключ-значение, которые мне нужно использовать позже

Так с MVC, как меняется этот «жизненный цикл»?

1 Ответ

39 голосов
/ 20 января 2009

Я попытаюсь прокомментировать каждый из упомянутых вами пунктов маркированного списка:

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

Ваши контентные страницы станут представлениями в мире MVC. Они по-прежнему предоставляют те же области содержимого для ваших главных страниц.

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

Хотя привязка данных в стиле веб-формы возможна в MVC, я считаю, что это не оптимальное решение. Лучше поместить свои данные в класс модели и строго набрать свое представление, чтобы иметь прямой доступ к этой модели. Тогда просто используйте синтаксис <%= ViewData.Model.SomeProperty %> для доступа к вашим данным и отображения их в нужных местах. Что касается viewstate, я рекомендую забыть, что он даже существует.

Помните, что одним из преимуществ использования MVC является то, что вы можете контролировать HTML-код, отправляемый клиенту. Воспользуйтесь этой силой и постарайтесь найти решения, которые позволят вам сохранить этот контроль. Элементы управления Webform пытаются скрыть html от вас и поэтому затрудняют настройку html, когда это необходимо.

Я бы настоятельно рекомендовал JQuery или одну из других столь же мощных библиотек javascript. Но научитесь использовать их для прямого доступа к HTML DOM и избежать проблем с идентификацией идентификаторов элементов управления веб-формы.

Вы можете использовать jquery для подключения к раскрывающемуся списку на стороне клиента и отправки стандартных запросов или запросов в стиле ajax. Эти запросы могут возвращать новые страницы, перенаправления, фрагменты HTML или даже данные JSON, которые можно использовать для обновления существующей страницы.

Сессия asp.net может использоваться по мере необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...