Ich möchte zu einer Aktion in der gleichen Controller umleiten, aber die Route Werte verlieren (insbesondere die id
Wert). Dies erweist sich als überraschend schwierig. Ich habe Routen wie folgt konfiguriert:Können die Routenwerte mit RedirectToAction gelöscht werden?
context.MapRoute(
"Monitoring_controllerIdSpecified",
"Monitoring/{controller}/{id}/{action}",
new { action = "Status" }
);
context.MapRoute(
"Monitoring_default",
"Monitoring/{controller}/{action}",
new { controller = "Events", action = "Index" }
);
... und eine Aktion Methode in EventsController
etwas wie folgt aus:
public ActionResult Status(int id) {
if (id > 1000) {
TempData["ErrorMessage"] = "ID too high.";
return RedirectToAction("Index", new { id = (int?)null });
}
// (code to display status)
}
Wenn ich dann so etwas wie /Monitoring/Events/1001
zuzugreifen, wird die RedirectToAction
zwar aufgerufen, aber ich umgeleitet werden zu /Monitoring?id=1001
statt nur /Monitoring
. Es scheint die erste Route, Monitoring_controllerIdSpecified
, zu entsprechen, obwohl diese Route id
als obligatorischer Route-Parameter hat und ich habe es id
auf null festgelegt und bizarrerweise id
in einen Abfragezeichenfolgenschlüssel verwandelt. Mit anderen Worten, es löscht/entfernt den id
Routenwert nicht ordnungsgemäß. Die Einstellung von id
auf eine leere Zeichenfolge im Objekt routeValues
, das an RedirectToAction
übergeben wird, hat denselben Effekt wie die Einstellung auf null
.
Warum macht es das und wie kann ich es davon überzeugen, nicht die erste Route zu entsprechen, weil id
vollständig aus den Routenwerten entfernt wurde?
haben Sie versucht, die ID aus der Routevaluedictionary zu entfernen, bevor Umleitung? – Slicksim
Sie könnten auch 'RedirectToRoute' anstelle von' RedirectToAction' versuchen. – danludwig
@Slicksim Welchen 'RouteValueDictionary' redest du? Können Sie mir einen Code geben, was Sie meinen? – Jez