Совместить Asp.Net MVC и WebForms

Programming
Предыдущий Следующий

 Что нужно сделать, что бы один проект обрабатывал и Asp.Net MVC и WebForms.

1а. В Visual Studio поддерживает два типа проектов WebForms: веб-приложение, в котором есть папка \bin, файлы .designer.cs и файл .csproj, и веб-сайт, который лишен всего этого. Если проект предоставляет собой веб-приложение, то все переходите к следующему шагу. Но если проект является веб-сайтом, то нужно его преобразовать. Соответствующие инструкции доступны по адресу msdn.microsoft.com/ru-ru/library/aa983476.aspx

1. Перевелите проект на Framework 3.5 (а лучше 4.0) в properties проекта (свойство Target Framework). Добавить ссылки(reference) на:

System.Web.Routing
System.Web.Abstractions
System.Web.Mvc

2. Добавляем в web.config следующее:

< ?xml version="1.0"?><configuration><system.web>
<compilation debug="false">
<assemblies>
   <add assembly="System.Core, Version=3.5.0.0, Culture=neutral,PublicKeyToken=B77A5C561934E089"/>
   <add assembly="System.Web.Extensions,Version=3.5.0.0, Culture=neutral,PublicKeyToken=31BF3856AD364E35"/>
   <add assembly="System.Web.Abstractions,Version=3.5.0.0, Culture=neutral,PublicKeyToken=31BF3856AD364E35"/>
   <add assembly="System.Web.Routing,Version=3.5.0.0, Culture=neutral,PublicKeyToken=31BF3856AD364E35"/>
   <add assembly="System.Web.Mvc,Version=2.0.0.0, Culture=neutral,PublicKeyToken=31BF3856AD364E35"/>
</assemblies>
</compilation>
<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.Linq"/>
   <add namespace="System.Collections.Generic"/>
</namespaces>
</pages>
<httpModules>
   <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
    </system.web>
</configuration>


3. Добавляем в Global.asax:

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute("Default", // Route name
                            "{controller}/{action}/{id}", // URL with parameters
                            new {controller = "Home", action = "Index", id = ""}
                );
        }

protected void Application_Start(object sender, EventArgs e)
    {
            RegisterRoutes(RouteTable.Routes);
    }

4. Открываем файл проекта .csproj, заменям элемент ProjectTypeGuids на <ProjectTypeGuids>{F85E285D-A4E0-4152-9332-AB1D724D3325}; {349c5851-65df-11da-9384-00065b846f21}; {fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>

Порядок всех guids ВАЖЕН. Для того что бы работал последний MVC, то нужно указать ид проекта этого MVC (его можно узнать отдельно создав MVC проект)

5. Добавляем в проект папки Controllers Views

6. В system.web/httpModules добавляем:

<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule,System.Web.Routing, Version=3.5.0.0, Culture=neutral,  PublicKeyToken=31BF3856AD364E35" />

7. В system.webServer/modules добавляем:

<remove name="UrlRoutingModule"/>
      <add name="UrlRoutingModule"   type="System.Web.Routing.UrlRoutingModule,  System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

8. В system.webServer/handlers добавляем:

<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

9. В папку Views добавляем Web.config (рекомендую скопировать с другого MVC проекта):

<?xml version="1.0"?>
<configuration>
  <system.web>
    <httpHandlers>
      <add path="*" verb="*"  type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>
    <pages validateRequest="false"
           pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter,  System.Web.Mvc, Version=2.0.0.0,  Culture=neutral,  PublicKeyToken=31BF3856AD364E35"
           pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc,   Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
            userControlBaseType="System.Web.Mvc.ViewUserControl,  System.Web.Mvc, Version=2.0.0.0, Culture=neutral,  PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc,  Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"  namespace="System.Web.Mvc"  tagPrefix="mvc" />
      </controls>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="BlockViewHandler"  path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/>
    </handlers>
  </system.webServer>
</configuration>

Самостоятельный отпуск Опыт заказа вывоза мусора в Киеве Магія зміни: Від ночі до дня
Магія Вечірнього Неба: Відлякуйте втомленість дня і зануртеся у світ загадок і краси