我正在尝试返回我的链接,因此它们显示为/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
答案 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无关紧要的内容。