Выбрать главу

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>