Книга: 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>
- Совмещение WebForms и MVC Framework в рамках одного веб-приложения
- ГЛАВА 2 MVC Framework и WebForms
- Восстановление с использованием инструмента gbak
- Типы страниц и их использование
- Использование констант
- Использование переменной окружения ISC_PATH
- Использование сервера Yaffil внутри процесса
- Использование CAST() с типами дата
- Использование типов содержимого и столбцов
- Вызов хранимых процедур InterBase с использованием стандартного синтаксиса ODBC
- Использование кнопки Автосумма
- 24.7. Использование программы-твикера