Книга: ASP.NET MVC Framework

Использование MVC Framework в существующих решениях WebForms

Использование MVC Framework в существующих решениях WebForms

Рассмотрим сценарий расширения существующего WebForms-приложения с использованием MVC Framework. Для этого нужно выполнить несколько простых шагов:

1. Установить в свойствах веб-приложения версию .NET Framework 3.5, поскольку если приложение WebForms было разработано для версии .NET Framework 2.0, то MVC Framework для нее не поддерживается.

2. Добавить ссылки на сборки System.Web.Mvc и System.Web.Routing.

3. Зарегистрировать в файле web.config необходимые для функционирования MVC-приложения обработчики в разделе system.web/httpModules (листинг 2.9) и system/webServer/modules и system/webServer/handlers (листинг 2.10). Необходимые изменения выделены полужирным. Кроме того, поскольку в листингах 2.9 и 2.10 сборки указываются без описания версий, необходимо в директорию bin веб-приложения скопировать файлы System.Web.Mvc.dll и System.Web.Routing.dll. Либо указать полные имена сборок, посмотрев описания в тестовом MVC-приложении, которое стоит создать по такому случаю.

4. Зарегистрировать пространства имен, которые будут использовать представления (листинг 2.11).

5. Создать таблицу маршрутизации в файле global.asax (листинг 2.12).

6. Создать директорию /Controllers, разместить в ней контроллеры.

7. Создать директорию /Views и разместить в ней дерево представлений, отвечающее контроллерам и их действиям (рис. 2.5).

Листинг 2.9. Регистрация модуля MVC Framework в web.config

<system.web>
  <httpModules>
    <add name="UrlRoutingModule"
      type=" System.Web.Routing.UrlRoutingModule,
      System.Web.Routing" />
    <add name="ScriptModule"
      type="System.Web.Handlers.ScriptModule,
      System.Web.Extensions"/>
  </httpModules>

Листинг 2.10. Регистрация модулей и обработчиков MVC Framework в web.config

<system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
  <modules runAllManagedModulesForAllRequests="true">
    <add name="ScriptModule" preCondition="managedHandler"
      type="System.Web.Handlers.ScriptModule,
      System.Web.Extensions"/>
      <add name="UrlRoutingModule" type="
       System.Web. Routing.UrlRoutingModule,
        System.Web.Routing" />
  </modules>
  <handlers>
    <add name="ScriptHandlerFactory" verb="*"
      path="*.asmx" preCondition="integratedMode"
      type="System.Web.Script.Services.ScriptHandlerFactory,
      System.Web.Extensions"/>
    <add name="ScriptHandlerFactoryAppServices" verb="*"
      path="*_AppService.axd" preCondition="integratedMode"
      type="System.Web.Script.Services.ScriptHandlerFactory,
      System.Web.Extensions"/>
    <add name="ScriptResource" preCondition="integratedMode"
      verb="GET,HEAD" path="ScriptResource.axd"
      type="System.Web.Handlers.ScriptResourceHandler,
      System.Web.Extensions" />
    <add name="MvcHttpHandler" preCondition="integratedMode" verb="*"
      path=" *.mvc" type=" System.Web.Mvc.MvcHttpHandler,
      System.Web.Mvc"/>
    <add name="UrlRoutingHandler" preCondition="integratedMode"

      verb="*" path="UrlRouting.axd"

      type="System.Web.HttpForbiddenHandler, System.Web" />
  </handlers>
</system.webServer>

Листинг 2.11. Регистрация пространств имен в файле web.config

<pages>
  <namespaces>
    <add namespace="System.Web.Mvc"/>
    <add namespace="System.Web.Mvc.Ajax"/>
    <add namespace="System.Web.Mvc.Html"/>
    <add namespace="System.Web.Routing"/>
    <add namespace="System.Iiinq"/>
    <add namespace="System.Collections.Generic"/>
  </namespaces>

Листинг 2.12. Таблица маршрутизации в файле Global.asax

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}") ;
  routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
  routes.MapRoute("Default", "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = "" });
}
protected void Application_Start()
{
  RegisterRoutes(RouteTable.Routes);
}


Рис. 2.5. Структура WebForms-приложения после добавления MVC-компонентов

После того как все необходимые шаги выполнены, можно продолжать пользоваться WebForms-приложением, а также использовать только что добавленные контроллер и представление, например, создав контроллер Home (листинг 2.13) и представление Index (листинг 2.14), можно получить при обращении по пути /Home/Index результат, представленный на рис. 2.6.

Листинг 2.13. Файл HomeController.cs

using System.Web.Mvc;
namespace WebFormsMvcInterop.Controllers {
  public class HomeController : Controller {
    public ActionResult Index()
    {
      return View();
    }
  }
}

Листинг 2.14. Файл Index.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//
EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <title></title>
</head>
<body>
  <h1>Hello from MVC</h1>
</body>
</html>


Оглавление книги


Генерация: 1.554. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз