0

TaskListsControllerというアクションで呼び出されるコントローラーがありEditます。

アクションは、null 許容のEditint パラメーターを受け入れます。null を受け取った場合は、TaskList. int を受け取るTaskListと、同じ ID で を編集します。いずれの場合も、ロジックはほぼ同じです。

EditURL '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」になります。

ケーキを持って食べる方法はありますか?

4

1 に答える 1

2

名前付きルート ( Html.RouteLink("linkText", "routeName")) を使用すると、ビューでもクリーンなルートを扱うことになるため、これを定義するよりクリーンな方法になる可能性があります。これはまた、心配することなく毎回正しいルートをたどることを意味します.

Nameそれに応じてルートのパラメーターを更新し、ビューに次を追加します。

Html.RouteLink("Add task list", "NewTaskList")

Html.RouteLink(taskList.Name, "EditTaskList", new { Id = taskList.Id })

于 2012-06-19T01:12:45.757 に答える