问题是 id = 5 已经在 URL 中作为http://localhost:4032/Category/5
. 但是要将该值传递给 ActionLink 似乎我必须这样做:
<td> @Html.ActionLink(p.ProdNo, "Main", "Home", new { id = 5, prodno = p.ProdNo }, null) </td>
这会产生正确的 URL:http://localhost:4032/Main/5/1097
但不得不这样做似乎不太正确。我知道必须有一些聪明的方法来处理这个问题。不幸的是,现在已经很晚了,我已经不聪明了。
我试过这个:
<td> @Html.ActionLink(p.ProdNo, "Main", "Home", new {prodno = p.ProdNo }, null) </td>
但最终以http://localhost:4032/Main?prodno=1097
.
我尝试将参数添加到代码隐藏中的相应方法中,但这似乎也不起作用。
简而言之,当使用 ActionLink 时,如何获取 URL 中已有的路由值并传入另一个/新的路由值?
全球.asax
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Sections", // Route name
"{controller}/{action}/{id}/{prodno}/{instid}/{section}", // URL with parameters
new { controller = "TestEdit", action = "Index", id = UrlParameter.Optional, prodno = UrlParameter.Optional, instid = UrlParameter.Optional, section = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Pumps", // Route name
"{controller}/{action}/{id}/{prodno}", // URL with parameters
new { controller = "Home", action = "Main", id = UrlParameter.Optional, prodno = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Jobs", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Jobs", id = UrlParameter.Optional } // Parameter defaults
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}