Asp.net MVC4 与 Web Form 并存
Web Forms 与 MVC 的asp.net 基础架构是相同的。MVC 的路由机制并不只MVC 特有的,它与WebForm 也是共享相同的路由机制。Web Forms 的Http请求针对的是物理文件,每个页面都实现IhttpHandler,MVC 的Http 请求是针对Controller的Action方法,最终依靠MvcHandler 实现对请求的响应。由于Web Forms 与MVC 的基础架构相同,所以Web Forms 与 MVC 可以并存在同一个站点下。
- 能响应Web Forms 的请求,并能在Page 页面使用 高大上的GridView
- 能响应MVC 请求,并能在View 页面使用 Razor引擎
实现过程
1. 创建空的Asp.net Web Application
2. 添加 MVC 与Razor 相关的 dll
3. 配置Web.config
![]()
- Form
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MyWebForm.aspx.cs" Inherits="MvcWithWebForm.WebForm.MyWebForm" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:GridView ID="gvTest" runat="server" ></asp:GridView>
</div>
</form>
</body>
</html>
- Page
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
namespace MvcWithWebForm.WebForm
{
public partial class MyWebForm : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{this.BindData();
}private void BindData()
{
this.gvTest.DataSource = this.GetCustomerList();
this.gvTest.DataBind();
}public List<Customer> GetCustomerList()
{
List<Customer> list = new List<Customer>();
for (int i = 0; i < 10; i++)
{
Customer c = new Customer() { No = 1000 * i, Name = string.Format("b0b0-{0}",i.ToString()) };
list.Add(c);
}
return list;
}
}public class Customer
{
public int No
{
get;
set;
}
public string Name
{
get;
set;
}}
}5. MVC
- Controller
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcWithWebForm.Controllers
{
public class CustomerController:Controller
{
public ActionResult Index()
{
return View();
}
}}
- View
@inherits System.Web.Mvc.WebViewPage
@{
ViewBag.Title = "Index";
}<h2>MVC Index</h2>
<div>
@for (int i = 0; i < 10; i++)
{
@Html.Raw(string.Format("<div style=\"font-size:{0}pt\"> Hello,Mvc Razor</div>", (5*i).ToString()));
}</div>
View的位置,必须放到 ~/Views/[Controller]/[ViewName]6. Global 配置 路由规则
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Routing;
using System.Web.Security;
using System.Web.SessionState;
using System.Web.Mvc;
using RouteDebug;
namespace MvcWithWebForm
{
public class Global : System.Web.HttpApplication
{protected void Application_Start(object sender, EventArgs e)
{
//全局路由表 忽略掉MVC 对asp.net Web Forms 请求
RouteTable.Routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");//MVC 路由规则
RouteTable.Routes.MapRoute(
"Customer",
"{controller}/{action}/{id}",
new { controller = "Customer", action = "Index", id = UrlParameter.Optional } // 参数默认值
);
}
项目结构

Asp.net MVC4 与 Web Form 并存的更多相关文章
- asp.net mvc4 System.Web.Optimization找不到引用
在MVC4的开发中,如果创建的项目为空MVC项目,那么在App_Start目录下没有BundleConfig.cs项的内容,在手动添加时在整个库中都找不到:System.Web.Optimizatio ...
- asp.net mvc vs web form
译者介绍 小小.NET学童,滴答…滴答…的雨…… 正文如下======================================================= 原文示例(VS2012): 1 ...
- Web Form 和asp.net mvc 差别
Asp.net MVC 和web Form的基本区别 Web Form ASP.NET MVC 视图和逻辑紧密耦合 视图和逻辑分离 页面(给予文件的URL) 控制器(基于路由的URL) 状态管理(视图 ...
- ASP.NET MVC4中调用WEB API的四个方法
http://tech.it168.com/a2012/0606/1357/000001357231_all.shtml [IT168技术]当今的软件开发中,设计软件的服务并将其通过网络对外发布,让各 ...
- ASP.NET MVC4 ASP.NET Web API路由规则
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Web.Ht ...
- 初入码田--ASP.NET MVC4 Web应用之创建一个空白的MVC应用程序
初入码田--ASP.NET MVC4 Web应用开发之一 实现简单的登录 初入码田--ASP.NET MVC4 Web应用开发之二 实现简单的增删改查 2016-07-29 在此之前,需要一台电脑( ...
- 添加asp.net mvc到现有的asp.net web form 应用程序
前言 asp.net mvc的前一版本为asp.net web Form(Asp.net mvc之前称为asp.net),其第一个版本与2002年年初发布.asp.net web form 属于.ne ...
- ASP.NET MVC与ASP.NET Web Form简单区别与适用场景
概论: Asp.net 微软 提供web开发框架或者技术.分Web Form和ASP.NET MVC.下面简单说明各自优缺点及使用场景. Web Form 优点: 1.支持丰富的服务器控件.如:Gr ...
- Asp.net web form url route使用总结
asp.net web form 使用URL路由 注不是mvc中的路由 一.前台控件使用路由,通过表达式生成url地址,注意给路由参数赋值,防止使用了其他路由表达式值方式1:<asp:Hyper ...
随机推荐
- sql脚本查询日期时间段日期
---列举指定时间月份DECLARE @date1 VARCHAR(10) , @date2 VARCHAR(10)SET @date1 = '2010-01-01'SET @date2 = '201 ...
- WinForm 使用 HttpUtility
在 Visual C# 中使用 HttpUtility 是无效的,即使添加了命名空间 System.Web,是因为需要在引用中添加 System.Web.dll. 可是没有 System.Web.dl ...
- 【redis】redis 在 windows 下安装使用
1.安装 windows 下 redis 可用客户端 : http://redisdesktop.com/download ; 或在 github 上下载 redis zip 包,解压包到某个目录并在 ...
- 多个插件依赖不同版本jQuery问题解决案例
<script src="../../../js/jquery-1.3.2.min.js" type="text/javascript">< ...
- mvc AddImplicitRequiredAttributeForValueTypes
1.AddImplicitRequiredAttributeForValueTypes (为值类型添加隐式必填验证),默认值 为true.刚在mvc view(html)中会为model的值类型属性( ...
- mac iterm2配置
iterm2的配置分为如下几个部分: 1. 字体大小的配置: iTerm->Preferences->Profiles->Text->Regular Font: 我在这里设置成 ...
- 表单验证插件 - formValidator
表单验证插件 - formValidator * 引入formValidator插件文件 * 引入formValidator插件的主文件 * 引入formValidator插件的正则有关文件 * 引入 ...
- 【Java学习笔记】函数的可变参数
package p2; public class ParamterDemo { public static void main(String[] args) { int sum1 = add(4,5) ...
- Three ways to set specific DeviceFamily XAML Views in UWP
Three ways to set specific DeviceFamily XAML Views in UWP http://igrali.com/2015/08/02/three-ways-to ...
- UIScrollView的三个属性
contentSize.contentOffset.contentInset UIScrollView的frame的size 指的是可视范围 contentSize 内容大小,滚动的范围 创 ...