Ответ 1
Жизненный цикл страницы ASP.NET полностью отличается от веб-форм, таких событий, как мы, например, в веб-формах, нет: предварительный рендеринг, oninit и т.д. Всякий раз, когда мы запрашиваем URL-адрес, происходит только то, что вызывается какое-то действие контроллера и отображается ответ в браузере.
Жизненный цикл страницы ASP.NET MVC:
Согласно MSDN, основными этапами жизненного цикла страницы asp.net mvc являются следующие:
1) Маршрутизация
направляет URL к контроллеру и действиям
В приложении ASP.NET каждая страница asp.net реализует интерфейс IHTTPHandler.
Этот интерфейс имеет метод ProcessRequest(), который вызывается при запросе страницы. Метод ProcessRequest() отвечает за обработку запроса и генерацию ответа. Таким образом, в приложении ASP.NET все просто, вы запрашиваете страницу в URL, например,
http://mysite1\default.aspx
а затем она ищет эту страницу на диске и выполняет метод processrequest и генерирует ответ.Однако в приложении MVC это не работает таким образом. Для конкретного запроса не существует физической страницы. Все запросы направляются в специальный класс Controller. Контроллер отвечает за генерацию ответа и отправку контента обратно в браузер.
2) Модуль маршрутизации Url перехватывает запрос:
Всякий раз, когда вы делаете запрос к приложению ASP.NET MVC, запрос перехватывается HTTP-модулем UrlRoutingModule.
Когда UrlRoutingModule перехватывает запрос, первое, что делает модуль - это оборачивает текущий HttpContext в объект HttpContextWrapper.
Объект HttpContextWrapper является производным от класса HTTPContextBase.
3) Обработчик MVC выполняет
MVCHandler также наследуется от IHTTPAsyncHandler. Когда MVC Handler выполняется, он вызывает асинхронно метод BeginProcessRequest в httpAsyncHandler.
Когда вызывается метод запроса процесса, создается новый контроллер. Контроллер создается из ControllerFactory. Существует класс ControllerBuilder, который устанавливает ControllerFactory.
Вы также можете создать свой собственный ControllerFactory, но по умолчанию это будет DefaultControllerFactory. RequestContext и имя Contoller будут переданы методу CreateController Method для получения конкретного Contoller.
4) Контроллер выполняет
контроллер вызывается и его действие вызывается по запросу пользователя.
Метод Execute() начинается с создания объекта TempData. TempData - это словарь, производный от класса TempDataDictionary и хранящийся в течение короткого сеанса, и это строковый ключ и значение объекта.
Метод Execute() получает действие из RouteData на основе URL-адреса. Затем класс Controller вызывает ContollerActionInvoker, который создает список параметров из запроса.
Эти параметры, извлеченные из параметров запроса, будут действовать как параметры метода. Параметры будут переданы любому выполняемому методу контроллера.
Наконец, он вызовет метод InvokeAction для выполнения действия.
5) Визуализированный метод просмотра
наконец, когда мы вызываем
reutrn View()
вызывается метод Render View, который помещает ответ на отображаемую страницу.Контроллер обычно выполняет либо метод RedirectToAction, либо метод RenderView. При вызове метода контроллеров RenderView() вызов делегируется текущему методу ViewEngines RenderView().
Метод WebFormViewEngine.RenderView() использует класс с именем класса ViewLocator, чтобы найти представление. Затем он использует BuildManager для создания экземпляра класса ViewPage по своему пути.
Далее, если страница имеет главную страницу, устанавливается местоположение главной страницы. Если на странице есть ViewData, устанавливается ViewData. Наконец, метод RenderView() вызывается в ViewPage.
Абстрактная пояснительная схема:
На глубине диаграммы:
Поток запросов "
Вот поток запросов asp.net mvc:
Ссылки Ссылки
Для получения более подробной информации см. " Понимание жизненного цикла страницы MVC".
Также вот еще одна хорошая статья, объясняющая жизненный цикл страницы MVC