問題は、 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 にあるルート値を取得し、別の/新しいルート値を渡すにはどうすればよいですか?
Global.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
);
}