路线链接 - Url.Action

时间:2010-03-15 12:01:36

标签: asp.net-mvc

我正在尝试返回我的链接,因此它们显示为/Area_1419.aspx/2/1。

我已经设法在示例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 个答案:

答案 0 :(得分:2)

请记住 - 网址与您的控制器及其操作分离。

这意味着 - 甚至像“trolololo / nomnomnom / 1/2/3”这样的古怪网址可能也可能不会调用Home/Index或任何其他控制器/动作组合。

在您的情况下 - 示例2实际上不知道如何转到Area_1419控制器。

Url.Action从这些路线详细信息中找出网址:

  

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

但是由于默认路由值,链接仍将调用归属控制器索引操作:

  

new {controller =“Home”,action =“Index”}


假设您使用Index操作获得了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方法(字符串,对象)

     

使用指定的操作名称和路由值为操作方法生成完全限定的URL。

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

尝试使用this one

  

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

在你的情况下:

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

答案 1 :(得分:1)

您可以使用Url.RouteUrl()

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

确保使用正确的路由名称,并获取正确的URL无关紧要的内容。