[转]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 经常会碰到在前台代码中要使用(或绑定)后台代码中变量值的问题.一般有& ...
随机推荐
- IIS7 上传时出现'ASP 0104 : 80004005'错误
这个错误本身说的是上传的文件的大小超过IIS所设置的默认值,一般为200KB,压缩文件是个下下之选,我还真这么干过.后来了解到通过更改IIS对上传文件的默认大小设置,来实现上传. 下面说一下具体步骤: ...
- 获取微信签名,并保存在xml文件中
using System; using System.Linq; using System.Text; using System.Web; using System.Web.UI; using Sys ...
- sql-省市区
insert into Area (codeid,parentid,cityName) values(11,0,'北京');insert into Area (codeid,parentid,city ...
- C# OleDbConnection对特定部分Excel的数据读取
最近在写winform程序,先来一个简单的. 读取特定部分Excel的数据读取,读取Excel第30行开始到H列的数据 using System;using System.Collections.Ge ...
- Android UI/UX 工具
Zeplin 用于界面图片自动导出. 图标 : https://material.io/icons/
- Debug Dart at External Terminal
launch.json { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions ...
- BZOJ 1002--[FJOI2007]轮状病毒(高精度)
1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 6858 Solved: 3745[Submit][Statu ...
- zookeeper基本操作
理解Zookeeper的一种方法是将他视为一个提供高可用性的文件系统.它没有文件和目录,但是有一个统一概念的节点,叫做znode,作为数据以及其他znode的容器.znode来自于一个层次级的命名空间 ...
- Java爬虫——Gecco简单入门程序(根据下一页一直爬数据)
为了完成作业,所以学习了一下爬虫Gecco,这个爬虫集合了以往所有的爬虫的特点,但是官方教程中关于Gecco的教程介绍的过于简单,本篇博客是根据原博客的地址修改的,原博客中只有程序的截图,而没有给出一 ...
- easyUI的分页,只显示第X 共Y页。改为显示 第X 页 共Y页
如下图,easyUI的分页,只显示第X 共Y页. 需求需要显示 第X 页 共Y页. 解决办法:在easyui-lang-zh_CN.js更改以下代码,即可.也就是在 “共{pages}页”前面加个 “ ...