我在这里有一个应用程序,其中混合了webform和mvc。我指定路由如下当添加非mvc路由时,Html.ActionLink构造错误的链接
routes.Add("AspxRoute", new Route("Upload/New", new WebFormRouteHandler<Page>("~/Uploads.aspx")));
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
因此,“Upload/New”的虚拟路径实际上映射到aspx webform页面。
但我的问题是,Html.ActionLink( “测试”, “控制器”, “行动”)现在呈现
/上传/新?控制器=控制器&行动=行动
查看了MVC源代码,我知道这是因为ActionLink调用RouteCollection.GetVirtualPath(requestContext, routeName, mergedRouteValues),其中routeName保留为空。不知何故,这默认使用AspxRoute路由来构造url。我试图在“AspxRoute”之前添加另一条路由,但它似乎总是默认为非mvc路由处理器。
RouteCollection.GetVirtualPath如何在routeName为空时表现?为什么它对我的情况如此呢?
如何构建正确的网址?我是否需要编写一个新的Htmlhelper扩展?
干杯
感谢你好。我知道RouteLink的作品,但这只是一点点的不便!所有的魔术弦。为什么ActionLink不起作用。 – 2009-11-19 18:10:15
它只包含一个比ActionLink更多的字符串,你原来的问题是“我如何构造一个正确的url?”。之所以有这个必要,是因为你的WebFormRouteHandler提供了一个“有效的”路由匹配,并且它是在RouteTable的默认路由之前添加的,因此它首先被返回。但无论如何,我已经添加了另一个可能更符合你的喜好的答案。 – 2009-11-20 14:51:58