您的位置:首页 > 理论基础 > 计算机网络

http://www.cnblogs.com/dudu/archive/2011/03/05/asp_net_webform_mvc.html

2015-08-17 12:35 886 查看
转载地址:http://www.cnblogs.com/dudu/archive/2011/03/05/asp_net_webform_mvc.html

问题场景:
在改进博客园博客后台的过程中,有一个页面我们想用ASP.NET MVC来写。但我们不想通过设置<modules runAllManagedModulesForAllRequests="true"/>使用System.Web.Routing来处理请求,因为不能确定这是否会与我们现有的URL重写产生冲突。我们只是想用Razor爽一下。
解决思路:
不改变ASP.NET管线的请求处理流程,请求还是正常到达一个.aspx页面,然后再转手给ASP.NET MVC。也就是把WebForm作为一个中转站。
好处:
在现有项目中,以最小的代价用上ASP.NET MVC。先品尝一下Razor的美味。
解决方法:
用System.Web.Mvc.MvcHandler可以轻松搞定,请看下面Home.aspx的代码:

<%@ Page Language="C#" AutoEventWireup="true" %>
<script runat="server">
protected override void OnInit(EventArgs e)
{
System.Web.Routing.RequestContext requestContext = new System.Web.Routing.RequestContext();
requestContext.HttpContext = new HttpContextWrapper(Context);
requestContext.RouteData = new System.Web.Routing.RouteData();
requestContext.RouteData.Values.Add("controller", "Home");
requestContext.RouteData.Values.Add("action", "Index");
IHttpHandler handler = new System.Web.Mvc.MvcHandler(requestContext);
handler.ProcessRequest(Context);
}
</script>


运行结果:



项目结构:



看,没有Global.asax。
演示代码下载:
CnblogsMvcDemo0305.rar
更新:
不走寻常路,是为了找到正确的路,感谢老赵指出了正确的路:
在Global.asax.cs的Application_Start中使用下面的代码:

RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
RouteTable.Routes.MapRoute(
"Test.aspx",
"Test.aspx",
new { controller = "Test", action = "Index" }
);


标签: ASP.NET MVC
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: