如何在webform的aspx应用中使用aspnet mvc2的 routemapping.docx

上传人:b****5 文档编号:7189583 上传时间:2023-01-21 格式:DOCX 页数:10 大小:163.80KB
下载 相关 举报
如何在webform的aspx应用中使用aspnet mvc2的 routemapping.docx_第1页
第1页 / 共10页
如何在webform的aspx应用中使用aspnet mvc2的 routemapping.docx_第2页
第2页 / 共10页
如何在webform的aspx应用中使用aspnet mvc2的 routemapping.docx_第3页
第3页 / 共10页
如何在webform的aspx应用中使用aspnet mvc2的 routemapping.docx_第4页
第4页 / 共10页
如何在webform的aspx应用中使用aspnet mvc2的 routemapping.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

如何在webform的aspx应用中使用aspnet mvc2的 routemapping.docx

《如何在webform的aspx应用中使用aspnet mvc2的 routemapping.docx》由会员分享,可在线阅读,更多相关《如何在webform的aspx应用中使用aspnet mvc2的 routemapping.docx(10页珍藏版)》请在冰豆网上搜索。

如何在webform的aspx应用中使用aspnet mvc2的 routemapping.docx

如何在webform的aspx应用中使用aspnetmvc2的routemapping

如何混合使用aspx和mvc2的route_mapping

背景

本文是讨论如何在已有的的webform应用类型中,添加mvc2的route-mapping的处理,并给出推荐的最佳实践。

如何集成mvc2

首先,需要将mvc框架引入webform的应用路径中。

涉及到的地方有:

引入依赖的assembly;web.config文件的处理;添加RouteTable的route-mapping;添加controller;

本文以一个home的urlmapping作为实现的目标来进行讨论。

1复制依赖的文件

安装mvc2之后,可以在ProgramFile下面找到安装的mvc2的安装目录,里面有需要的System.Web.Mvc.dll文件:

在ProgramFile下的ReferenceAssemblies下的Framework\v3.5下,能找到需要的System.Web.Routing.dll和System.Web.Abstractions.dll文件:

将上面的文件复制到webapp的bin目录下,依赖的文件就复制完毕了。

2修改web.config

需要修改两处,对应IIS6和IIS7的经典模式的配置节,需要在配置节下的配置节中,添加下面的行:

以及对应IIS7的集成模式的配置节,在配置节下的配置节,添加下面的行:

3修改global.asax

这部分工作是添加RouteTable的默认的Route处理,这里是假设提供的Route的Controller中包含RegisterRoute静态方法,代码如下:

4添加Route-Mapping

这部分的代码较多,直接贴代码了。

由于考虑支持.net3.5的平台,所以里面的新的匿名类、类扩展等新特性需要用传统方式改写。

为了支持RouteMap中的属性定义,我添加了一个HomeControllerInfo属性类,提供可以识别的controller、action、id属性:

classHomeControllerInfo

{

privateobject_controller;

publicobjectcontroller{

get

{

return_controller;

}

set

{

_controller=value;

}

}

privateobject_action;

publicobjectaction

{

get

{

return_action;

}

set

{

_action=value;

}

}

privateobject_id;

publicobjectid

{

get

{

return_id;

}

set

{

_id=value;

}

}

}

在HomeController的RegisterRoutes方法中,设置好HomeControllerInfo实例的默认值,然后调用RouteCollectionExtensions的MapRoute方法,做Route-Mapping:

publicstaticvoidRegisterRoutes(RouteCollectionroutes)

{

HomeControllerInfoinfo=newHomeControllerInfo();

info.controller="Home";

info.action="Index";

info.id=UrlParameter.Optional;

RouteCollectionExtensions.MapRoute(routes,

//routes.MapRoute(

"HomeMvc",//Routename

"home.mvc/{action}/{id}",//URLwithparameters

info//new{controller="Home",action="Index",id=UrlParameter.Optional}//Parameterdefaults

);

RouteCollectionExtensions.MapRoute(routes,

//routes.MapRoute(

"Home1",//Routename

"home/{action}/{id}",//URLwithparameters

info//new{controller="Home",action="Index",id=UrlParameter.Optional}//Parameterdefaults

);

RouteCollectionExtensions.MapRoute(routes,

//routes.MapRoute(

"Home2",//Routename

"home.aspx/{action}/{id}",//URLwithparameters

info//new{controller="Home",action="Index",id=UrlParameter.Optional}//Parameterdefaults

);

}

上面提供的Route-Mapping的方式有3种,我们依次列举。

Øhome/{action}/{id}的模式

第一种是mvc推荐的模式,是home/{action}/{id}的模式,IIS6下需要提供通用的处理handler,并指向aspnet_isapi.dll,过程如下:

记住需要去掉文件存在的验证,要么会导致Route-Mapping的失败。

这种方式会导致对静态文件的处理都会经过的处理,发现很容易导致不兼容的情况,对puremvc的应用是一个可以考虑的选择,对于webform与mvc的混合应用不太适合,pass掉。

Øhome.mvc/{action}/{id}的模式

这种也是微软建议的forIIS6的处理模式。

需要在IIS6中添加一个.mvc的应用程序扩展类型,然后将其处理handler指向aspnet_isapi.dll,过程如下:

记住需要去掉文件存在的验证,要么会导致Route-Mapping的失败。

这种方式会导致一定的配置工作量,不是很理想。

Øhome.aspx/{action}/{id}的模式

最好这种是直接拦截aspx的处理请求的模式,不需要配置。

因为UrlRoutingModule的处理过程优先于aspx的handler的派发,所以可以添加基于特定aspx的Route-Mapping。

这种方式需要的配置工作量极小,可以很好的和IIS6协同工作,所以是推荐的webform与mvc的混合应用模式下的Route-Mapping的首选的处理模式。

该模式的缺点是容易引起混淆,不容易在形式上区分普通的aspx请求和mvc的aspx请求,不过相比对每个IIS6的配置,这个困难是要小很多。

ØMapRoute中的url释义

以模式home.aspx/{action}/{id}为例:

其中,定义了两个变量,action和id,其中action是强制的名称,和controller中的方法名称对应(大小写不敏感)。

Id可以是任意的名称,对应action中的参数(同样大小写不敏感)。

由于url的连接点(home.aspx)是给定的,因此对应的controller也是固定的,这里通过默认值来添加。

默认值中,指定了默认的controller名称是Home,那么mvc会查找HomeController类作为http请求的处理者。

action的默认值是”index”,如果没提供action的时候会使用index作为action。

id的默认值是UrlParameter.Optional,表示这个值是可以没有。

info.controller="Home";

info.action="Index";

info.id=UrlParameter.Optional;

5添加controller的处理

我们假定的允许场景是根据请求的action和参数,返回对应的JSON对象。

这样,我们在HomeController的Index方法中,返回一个JsonResult就可以了,在Controller的基类方法Json中对此进行了封装,直接调用就可以。

需要注意两点:

1、参数id需要是可空类型;

2、返回的JsonResult需要指定JsonRequestBehavior.AllowGet,否则不能在Get请求中返回JSON数据;

[HandleError]

publicclassHomeController:

Controller

{

publicActionResultIndex(int?

id)

{

stringresult="HomeController.Index(int?

id),id:

";

if(id.HasValue)

{

result+=id.Value.ToString();

}

else

{

result+="null";

}

returnthis.Json(result,JsonRequestBehavior.AllowGet);

}

publicActionResultAbout()

{

returnthis.Json("WelcometoASP.NETMVC!

",JsonRequestBehavior.AllowGet);

}

总结

经验证,在传统的webform应用类型中,提供mvc2的route-mapping是可行的,建议通过拦截aspx的处理来添加route-mapping的处理模式。

建议在每个controller中,提供一个RegisterRoutes的静态共有方法,用来登记自己的routes。

在此基础之上,提供route-mapping的配置文件,用来加载和初始化RouteTable中的routes。

附件

上面涉及的相关配置文件和源代码。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1