Frage

Ich arbeite an einer ASP.NET MVC-Anwendung und bin auf eine seltsame Sache gestoßen.

Ich habe zwei Controller-Aktionen wie diese:

[CustomAuthorize(Roles = SiteRoles.Admin)]
public ActionResult Review(int? id)

[CustomAuthorize(Roles = SiteRoles.Admin)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Review(AdReview data)

Zuerst rufe ich die Review-Aktion mit null als Parameter auf. Dadurch wird eine Webseite mit einer Liste von Elementen aufgerufen.Die Elemente werden mit der festgelegten ID mit der ersten Überprüfungsaktion verknüpft.

Wenn die ID für die Überprüfungsaktion angegeben wurde, wird eine Bearbeitungswebseite für dieses Element zurückgegeben.Wenn Sie nach einigen Änderungen auf "Senden" klicken, wird die zweite Überprüfungsaktion (Beitrag) ausgeführt.Hier wird der Artikel gespeichert.

Bisher alles in Ordnung.

Jetzt habe ich in der letzten Überprüfungsaktion (Beitrag) am Ende den folgenden Code erhalten:

return RedirectToAction("Review", "Ad");

Dadurch wird die erste Überprüfungsaktion erneut ausgelöst. Das Problem besteht darin, dass die vorherige ID angegeben wird.Mein Gedanke war, dass RedirectToAction keine Parameter liefert?

War es hilfreich?

Lösung

Mein Gedanke war, dass RedirectToAction keine Parameter bereitstellt?

Ihr Verständnis ist falsch.Im Modellstatus vorhandene Parameter werden automatisch weitergeleitet, wenn die Ziel-URL einen Routenparameter mit demselben Namen enthält.In diesem Fall haben Sie einen id-Parameter, der veröffentlicht wird (wahrscheinlich als Teil eines Eingabefelds oder als Teil der URL) und wenn Sie zur ursprünglichen Indexaktion zurückleiten, da Ihre Routendefinitionen am Ende des id-Tokens einen RedirectToAction-Token habenMethode wird es füllen.

Um dieses Verhalten zu umgehen, können Sie explizit angeben, dass der Parameter id bei der Umleitung nicht gesendet werden soll:

return RedirectToAction("Index", "Ad", new { id = "" });

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top