• 【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的路由

  • 相关阅读:
    Python入门-函数进阶
    Python入门-初始函数
    Leetcode300. Longest Increasing Subsequence最长上升子序列
    Leetcode139. Word Break单词拆分
    Leetcode279. Perfect Squares完全平方数
    Leetcode319. Bulb Switcher灯泡开关
    Leetcode322. Coin Change零钱兑换
    二叉树三种遍历两种方法(递归和迭代)
    Leetcode145. Binary Tree Postorder Traversal二叉树的后序遍历
    Leetcode515. Find Largest Value in Each Tree Row在每个树行中找最大值
  • 原文地址:https://www.cnblogs.com/Locked-J/p/7422050.html
Copyright © 2020-2023  润新知