zoukankan      html  css  js  c++  java
  • 【Asp.Net】WebForm中添加MVC

    参考

    WebForm与MVC混用

    环境

    Win7 IIS6 VS2015
    .Net Framework4.5.1

    原因

    暂时不想用MVC重构这个WebForm代码

    1. 给WebForm项目添加引用

    // 主要
    System.Web.Razor
    System.Web.Abstractions
    System.Web.Mvc
    System.Web.WebPages
    
    // 可能还有
    System.Web.Optimization
    System.Web.Routing
    Newtonsoft.Json
    

    2. 将MVC项目的部分文件拷贝到WebForm项目

    拷贝Controllers和Views,也许还有content(我将样式复制到了APP_Theme下),scripts。Views似乎是必须的,也不能改名字,拷贝到根目录下。

    Controllers等代码需要拷贝到APP_CODE。

    3. 修改web.config文件配置

    主要将MVC项目的web.config内容添加到WebForm的web.config文件中,不要删除WebForm的原有设置,在对应节点后面加上MVC的内容即可。

    <!-- WebForm的web.config文件需要加的内容,即MVC的设置,大致如下 -->
    
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <configSections>
        <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
          <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
        </sectionGroup>
      </configSections>
      <appSettings>
        <add key="webpages:Enabled" value="false" />
      </appSettings>
      <system.web.webPages.razor>
        <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
        <pages pageBaseType="System.Web.Mvc.WebViewPage">
          <namespaces>
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Optimization" />
            <add namespace="System.Web.Routing" />
            <add namespace="System.Linq" />
            <add namespace="System.Collections.Generic" />
          </namespaces>
        </pages>
      </system.web.webPages.razor>
      <system.web>
        <compilation debug="true" targetFramework="4.5.1">
          <assemblies>
            <add assembly="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
            <add assembly="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
          </assemblies>
        </compilation>
        <httpRuntime targetFramework="4.5.1" />
        <pages>
          <namespaces>
            <add namespace="System.Web.Mvc" />
            <add namespace="System.Web.Mvc.Ajax" />
            <add namespace="System.Web.Mvc.Html" />
            <add namespace="System.Web.Optimization" />
            <add namespace="System.Web.Routing" />
            <add namespace="System.Linq" />
            <add namespace="System.Collections.Generic" />
          </namespaces>
        </pages>
      </system.web>
      <system.webServer>
        <!-- 必要,没有MVC获取不到请求,modules节点唯一,如果有了,把 runAllManagedModulesForAllRequests="true" 属性加上就行 -->
        <modules runAllManagedModulesForAllRequests="true">    
        </modules>
      </system.webServer>
    </configuration>
    

    4. 修改Global.asax文件及路由设置

    <!-- Global.asax -->
    
    <%@ Application Language="C#" %>
    <%@ Import Namespace="System.Web.Routing" %>
    <%@ Import Namespace="System.Web.Mvc" %>
    <%@ Import Namespace="System.Web.Optimization" %>
    
    <%@ Import Namespace="AppStart" %><!-- App_Start 里面BundleConfig.cs、RouteConfig.cs等的命名空间-->
    
    <script runat="server">
        void Application_Start(object sender, EventArgs e)
        {
            //AreaRegistration.RegisterAllAreas(); 一定要去掉
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            // …… 
            // 这里即可用当做MVC的Global.asax.cs里的启动方法用
        }
    </script>
    
    
    /*RouteConfig.cs*/
    
    using System.Web.Mvc;
    using System.Web.Routing;
    
    namespace AppStart {    // 这里命名空间记得改成自己的
        public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
                //避免aspx页面的请求传递给控制器
                routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
    
                routes.MapPageRoute("Home", "", "~/Default.aspx");    // 设置原来的主页为默认路径
    
                routes.MapMvcAttributeRoutes();
    
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
            }
        }
    }
    

    小结

    基本是把MVC的东西复制过来,注意的是引用、复制代码到App_Code、设置内的runAllManagedModulesForAllRequests、aspx的路由

  • 相关阅读:
    SQL having 子句
    sqlserver2008 R2 创建作业(定时任务)
    3步完成chrome切换搜索引擎
    http模拟请求工具
    网页自动加载进度条插件
    span设为inline-block之后,未包含文字时下面会多出一条空白问题
    记一次特殊的下载字体方法
    团队冲刺第十三天
    团队冲刺第十二天
    人月神话03
  • 原文地址:https://www.cnblogs.com/Locked-J/p/7422050.html
Copyright © 2011-2022 走看看