zoukankan      html  css  js  c++  java
  • [转]WebForm中使用MVC

    本文转自:https://www.cnblogs.com/encoding/articles/3556046.html

    • 前言

    掐指一算,3年没写博了,好懒的说。。。


    众所周知,MVC现在越来越火了,不懂MVC的程序猿都不好意思说自己是搞网站开发的。

    虽然MVC与WebForm各有所长,但是基于种种原因,很多用WebForm开发的网站需要转移到MVC上面来。但是,原有的系统上面有非常非常庞大的业务代码和页面代码,在实际工作中,不可能将一个WebForm开发的网站一次性全部转换到MVC框架中来,那么这个时候,就要用到本文说的:在WebForm中使用MVC。采用一个页面一个页面的方式,逐渐将整个网站全部转移到MVC中。


    • 为WebForm项目添加引用

    要使用MVC,肯定要为项目添加MVC的引用,由于是我们自己操作,肯定不会像通过VS创建MVC项目那样引用一大篇的dll。必须引入的有以下几个:

    复制代码
    System.Web.Abstractions;
    System.Web.DynamicData;
    System.Web.Mvc;
    System.Web.Optimization;
    System.Web.Razor;
    System.Web.WebPages;
    
    复制代码
    • 建立MVC项目结构

    使用MVC最大的一个好处就是细分了网站层,所以MVC中约定俗成的几个目录一个都不能少。Controllers、Views、Models、Scripts、Content几个文件是必须按照MVC项目结构搬移过来。

    当然,Controllers和Models你可以自定义到其他dll中去,Scripts和Content你也可以使用自己的目录结构存放。但是Views必须放在根目录下,并且Views目录中结构必须如下图所示(Shared目录和目录中的文件不能少,_ViewStart、Web.config文件也不能少,至于Home目录,是自己开发的,可以不必理会):

    image

    • 配置Web.config文件

    原有WebForm的Web.config中的节点不要随便动,将下面的config内容中各个节点添加到原有的Web.config文件中。

    复制代码
    <?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=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
          <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=2.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.Routing"/>
            <add namespace="System.Linq"/>
            <add namespace="System.Collections.Generic"/>
          </namespaces>
        </pages>
      </system.web.webPages.razor>
      <system.web>
        <compilation debug="true" targetFramework="4.5">
          <assemblies>
            <add assembly="System.Web.Razor, Version=2.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=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          </assemblies>
        </compilation>
        <httpRuntime targetFramework="4.5" />
        <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>
      </system.web>
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
      </system.webServer>
    </configuration>
    复制代码

    关键是configSections、appSettings、system.web.webPages.razor三个节点,如果有丢失,那么cshtml文件将在开发时无法识别razor语法(运行时能够识别)。

    system.web节点中的两段引用如果缺失,MVC页面将无法访问。

    system.webServer中的<modules runAllManagedModulesForAllRequests="true"/>节点如果丢失,MVC页面将无法访问。

    • 注册路由

    好了,结构搭建完成,现在要为MVC的路由进行注册了。

    WebForm中有一个文件叫做全局应用程序类Global.asax,如果没有,就添加一个。

    在Golbal.asax的Application_Start事件中,添加以下代码:

    复制代码
    RouteCollection routes = RouteTable.Routes;
    
                //避免对 Web 资源文件(例如 WebResource.axd 或 ScriptResource.axd)的请求传递给控制器  
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
                //避免aspx页面的请求传递给控制器
                routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
    
                //路由注册
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
    复制代码

    怎么样,这段代码是不是很熟悉?不错,它就是MVC项目中App_Start目录下的RouteConfig.cs文件的RegisterRoutes方法代码。

    image

    • 测试一下

    来个gif动态图。

    webmvc

    OK,收工。

    懒惰,是一个通病。 努力,必会成为一种习惯。
  • 相关阅读:
    HVIE、HDFS常用操作
    Xshell中使用小键盘问题
    配置SSH免密登录及常见问题
    Linux命令行常用光标控制快捷键
    Linux禁止root用户ssh登录
    sqoop 1.4.7 单机安装
    Hive单机服务的安装配置
    Hadoop 2.9单机安装配置
    CentOS连接wifi
    Servlet
  • 原文地址:https://www.cnblogs.com/freeliver54/p/8845797.html
Copyright © 2011-2022 走看看