同じコントローラー内のアクションにリダイレクトしたいのですが、ルート値 (特にid
値) を失います。これが意外と難しくなっています。私は次のように構成されたルートを持っています:
context.MapRoute(
"Monitoring_controllerIdSpecified",
"Monitoring/{controller}/{id}/{action}",
new { action = "Status" }
);
context.MapRoute(
"Monitoring_default",
"Monitoring/{controller}/{action}",
new { controller = "Events", action = "Index" }
);
EventsController
...そして、次のような内部のアクションメソッド:
public ActionResult Status(int id) {
if (id > 1000) {
TempData["ErrorMessage"] = "ID too high.";
return RedirectToAction("Index", new { id = (int?)null });
}
// (code to display status)
}
次に のようなものにアクセスすると/Monitoring/Events/1001
、RedirectToAction
確かに が呼び出されますが、/Monitoring?id=1001
だけではなく にリダイレクトされ/Monitoring
ます。最初のルート に一致しているようMonitoring_controllerIdSpecified
ですが、そのルートにはid
必須のルート パラメータがあり、id
null に設定するように指示し、奇妙にid
クエリ文字列キーに変わります。つまり、id
ルート値を適切にクリア/削除していません。に渡さid
れたオブジェクトで空の文字列を設定すると、 に設定した場合と同じ効果が得られます。routeValues
RedirectToAction
null
id
なぜこれを行うのですか?ルート値から完全に削除されているため、最初のルートと一致しないようにするにはどうすればよいですか?