2010-03-15 69 views
0

我试图返回我的链接,因此它们显示为/Area_1419.aspx/2/1。路线链接 - Url.Action

我已经设法在例子2中得到这个结果,但我不明白它为什么会起作用,因为我会看到下面的例子1工作。

我不明白例2知道如何去Area_1419控制器

路线

routes.MapRoute(
    "Area_1419 Section", 
    "Area_1419.aspx/{section_ID}/{course_ID}", 
    new { controller = "Home", action = "Index" } 
); 

捷径实施例1

<a href='<%=Url.Action("Area_1419", 
    new { section_ID="2", course_ID="1" })%>'><img .../></a> 

返回:/Home.aspx/Area_1419?section_ID=2 & COURSE_ID = 1个

链接例2

<a href='<%=Url.Action("index", 
    new { section_ID="2", course_ID="1" })%>'><img .../></a> 

返回:/Area_1419.aspx/2/1

回答

2

记住 - 网址是从您的控制器和他们的行动分离。

这意味着甚至bizzare网址,例如“trolololo/nomnomnom/1/2/3”可能会也可能不会呼叫Home/Index或任何其他控制器/操作组合。

在你的情况 - 例2实际上不知道如何去Area_1419控制器。

“Area_1419.aspx/{SECTION_ID}/{} COURSE_ID”

但仍链接会打电话回家控制器指数操作,因为:

Url.Action从这些路线的详细信息算出网址默认路由值:

新{控制器= “家”,行动= “索引”}


假设你有Area_1419控制器与指数的动作,你的路线应该是这样的:

routes.MapRoute(
    "Area_1419 Section", 
    "Area_1419.aspx/{section_ID}/{course_ID}", 
    new { controller = "Area_1419", action = "Index" } //changes here 
); 

This is您所呼叫的内容。

UrlHelper.Action方法(String,对象)

通过使用指定的操作名称和路由值生成一个完全合格的URL到一个操作方法。

此方法重载不会试图找出适当的控制器。它假设你知道它(从当前路由值中取出),并将第一个字符串参数理解为一个动作名称。

尝试使用this one

UrlHelper.Action方法(字符串,字符串,对象)
通过使用指定的操作的名称,控制器名称和路由值生成一个完全合格的URL到一个操作方法。

你的情况:

Url.Action("Index","Area_1419", new { section_ID="2", course_ID="1" }); 
+0

我更新了路线,但链接<%= Url.Action(“Area_1419”,new {section_ID =“2”,course_ID =“1”})%>仍然返回/Home.aspx/Area_1419?section_ID = 2&course_ID = 1 – Jemes 2010-03-15 12:27:20

+0

@Jemes检查我的更新:) – 2010-03-15 12:48:14

+0

非常感谢! – Jemes 2010-03-15 12:59:14

1

您可以使用Url.RouteUrl(),你的情况

Url.RouteUrl("Area_1419 Section", new { controller = "Home", action = "Index", section_ID="2", course_ID="1"}

,以确保您使用正确的路径名,并没有得到正确的URL -有什么关系。