[转]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目录,是自己开发的,可以不必理会):

配置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方法代码。

测试一下
来个gif动态图。

OK,收工。
[转]WebForm中使用MVC的更多相关文章
- WebForm中使用MVC
http://www.cnblogs.com/encoding/articles/3556046.html ********************************************** ...
- 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数
目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...
- 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作
原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...
- 在ASP.NET非MVC环境中(WebForm中)构造MVC的URL参数,以及如何根据URL解析出匹配到MVC路由的Controller和Action
目前项目中有个需求,需要在WebForm中去构造MVC的URL信息,这里写了一个帮助类可以在ASP.NET非MVC环境中(WebForm中)构造MVC的URL信息,主要就是借助当前Http上下文去构造 ...
- ASP.NET MVC IOC 之 Autofac(三)-webform中应用
在webform中应用autofac,只有global中的写法不一样,其他使用方式都一样 nuget上引用: global中的写法: private void AutoFacRegister() { ...
- Mvc与WebForm优缺点及Mvc的使用
关于Mvc与WebForm的优缺点在网上的评论可谓不胜枚举,但脱离了我们的项目来谈这些意义就不大了.以我们这次改版来看,WebForm的优势有以下几点: 一,可以使用<#include>, ...
- webform 中使用ajax
常用的方式有 js –> WebService , js->*.ashx, js->WebAPI, js->MVC Controller->Action. 前两种就不说 ...
- Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net
Ext.Net是一个对ExtJS进行封装了的.net控件库,可以在ASP.NET WebForm和MVC中使用.从今天开始记录我的学习笔记,这是第一篇,今天学习了如何在WebForm中使用Ext.Ne ...
- ASP.NET WebForm中前台代码如何绑定后台变量
转载自 http://www.cnblogs.com/lerit/archive/2010/10/22/1858007.html 经常会碰到在前台代码中要使用(或绑定)后台代码中变量值的问题.一般有& ...
随机推荐
- asp .net api 日志
方法1:继承IExceptionLogger ExceptionLogger是框架提供的表示未处理的异常记录器的抽象类 public class RecordExceptionLogger : Exc ...
- OI动态规划&&优化 简单学习笔记
持续更新!! DP的难点主要分为两类,一类以状态设计为难点,一类以转移的优化为难点. DP的类型 序列DP [例题]BZOJ2298 problem a 数位DP 常用来统计或者查找一个区间满足条件的 ...
- XCode - 无法对iPhone真机调试的解决方法!
OSX:10.14 XCode:10.1 真机:iPhone 4S 错误很多啊,并非编译错误,编译已经成功了,但是无法安装到真机,我真不理解啊!!由于真的没有想到能够解决,有的错误没有截图,先看部分错 ...
- 918. Maximum Sum Circular Subarray
Given a circular array C of integers represented by A, find the maximum possible sum of a non-empty ...
- window7下Python安装
去python官网下载软件,https://www.python.org. 选择dowloads-->windows,选择稳定版python3.5.2,x86表示32位操作系统,x86-64表示 ...
- 打开SVN server图形化管理界面
来源:http://blog.csdn.net/u013495063/article/details/76796079 1.在ViaualSVN Service的安装目录:C:\Program Fil ...
- C的Define
#define Conn(x,y) x##y //表示x连接y #define ToChar(x) #@x //给x加上单引号 #define ToString(x) #x //给x加双引号 #d ...
- mysql层的内存分配
参考 http://www.cnblogs.com/justfortaste/p/3198406.html http://m.blog.csdn.net/blog/IT_PCode/17007833 ...
- 使用git时出现Please make sure you have the correct access rights and the repository exists.问题已解决。
使用git时,出现Please make sure you have the correct access rights and the repository exists.问题已解决. 今天我在使用 ...
- Redhead安装VMware Tools
Redhead安装VMware Tools VMware Tools 是款插件,便于在图形化界面中移动鼠标和复制拖动文件,对于redhead等命令符界面用处不大. 2.挂载光盘安装方法