TaskListsController
というアクションで呼び出されるコントローラーがありEdit
ます。
アクションは、null 許容のEdit
int パラメーターを受け入れます。null を受け取った場合は、TaskList
. int を受け取るTaskList
と、同じ ID で を編集します。いずれの場合も、ロジックはほぼ同じです。
Edit
URL 'TaskLists/Add'がパラメーターとして null を使用してアクションにマップされ、URL 'TaskLists/Edit/{id}' がマップされEdit
て ID に渡されるように、ルーティングを構成したいと考えています。 URL。
ブラウザーに URL を入力してアクションに正しくルーティングするという観点からこれを機能させることができますが、システムが から URL を生成する場所で問題が発生しますHtml.ActionLink
。
以下を使用して「追加」リンクを生成しています。
Html.ActionLink("Add task list", "Edit", "TaskLists")
そして、次を使用して「編集」リンクを生成しています。
Html.ActionLink(taskList.Name, "Edit", new { Id = taskList.Id })
..クラスtaskList
のインスタンスですTaskList
。
このルーティングを使用する場合:
routes.MapRoute(
"TaskLists/Add", // Route name
"TaskLists/Add", // URL with parameters
new { controller = "TaskLists", action = "Edit" });
routes.MapRoute(
"TaskLists/Edit/{id}", // Route name
"TaskLists/Edit/{id}", // URL with parameters
new { controller = "TaskLists", action = "Edit", id = UrlParameter.Optional });
...「追加」リンクは正しく生成されますが (「TaskLists/Add」)、「編集」リンクは「TaskLists/Add?Id=1」になります。
ルーティング コマンドを逆にすると、次のようになります。
routes.MapRoute(
"TaskLists/Edit/{id}", // Route name
"TaskLists/Edit/{id}", // URL with parameters
new { controller = "TaskLists", action = "Edit", id = UrlParameter.Optional });
routes.MapRoute(
"TaskLists/Add", // Route name
"TaskLists/Add", // URL with parameters
new { controller = "TaskLists", action = "Edit" });
...その後、「編集」リンクは正しく生成されますが (「TaskLists/Edit/x」)、「追加」リンクは「TaskLists/Edit」になります。
ケーキを持って食べる方法はありますか?