Der Wechsel zu {controller} / {id} / {action} unterbricht RedirectToAction

8

Ich versuche, richtige REST URLs mit MVC zu verwenden. Dazu habe ich das Standard-Routing von:

geändert %Vor%

bis

%Vor%

also statt:

%Vor%

gibt es jetzt

%Vor%

ActionLink scheint in Ordnung zu sein, aber der folgende Code in CustomerController:

%Vor%

endet in URL /Customer/23/Search . Es sollte zwar nach /Customer/Search gehen. Irgendwie erinnert es sich 23 (id) .

Hier ist mein Routing-Code in global.cs

%Vor%

Wenn ich die beiden Funktionen umschalte, beginnt RedirectToAction zu arbeiten, aber mit:

%Vor%

Erzeugt jetzt /Customer/Approve?id=23 anstelle von /Customer/23/Approve .

Ich könnte direkte URLs wie ~/Customer/23/Approve anstelle von ActionLink und RedirectToAction angeben, würde aber lieber bei Funktionen bleiben, die von MVC bereitgestellt werden.

    
Eric P 06.07.2011, 13:14
quelle

6 Antworten

1

Übergeben Sie in Ihrem Controller ein neues (leeres) RouteValueDictionary

%Vor%

Und hier:

%Vor%

Ich weiß nicht einmal, wie es den Kundencontroller abholen kann, da Sie ihn nirgends angeben. Versuchen Sie, dem ActionLink-Helper den Controller und die Aktion bereitzustellen.

    
mare 06.07.2011 13:31
quelle
1

Wenn Sie RedirectToAction () verwenden, verwendet MVC intern die vorhandenen Routendaten (einschließlich des ID-Werts), um die URL zu erstellen. Auch wenn Sie ein RouteValueDictionary von null übergeben, werden die vorhandenen Routendaten mit den neuen Daten des leeren Routenwerts zusammengeführt.

Der einzige Weg, den ich sehen kann, ist RedirectToRoute () zu verwenden, wie folgt:

%Vor%

Ratgeber

    
counsellorben 06.07.2011 21:28
quelle
0

Übergeben Sie die aktuellen Routendaten an methon in Ihrer Controller-Aktion:

%Vor%     
dreza 07.07.2011 01:04
quelle
0

Entfernen Sie diesen Teil:

%Vor%

kann das Problem lösen; Wenn Sie "id" als optionalen Parameter definieren und die Karte "Default" haben, sind "Default" und "AdminRoute" gleich! Grüße.

    
javad amiry 18.07.2011 14:56
quelle
0

Ich hatte ein ähnliches Problem. Routenwerte, die an meine Controller-Aktion übergeben wurden, wurden wiederverwendet, als ich versuchte, den Benutzer mit RedirectToAction umzuleiten, auch wenn ich sie nicht im neuen RouteValueDictionary angegeben hatte. Die Lösung, die ich gefunden habe (nach dem Lesen (cellskellben's post) mit dem RouteData für die aktuelle Anfrage. Auf diese Weise konnte ich verhindern, dass MVC Routenwerte zusammenführte, die ich nicht angegeben hatte.

In Ihrer Situation könnten Sie vielleicht so etwas tun:

%Vor%     
ScottieMc 14.09.2011 21:15
quelle
0

Ich hatte ein ähnliches Problem und konnte es lösen, indem ich die ID zur Standardroute hinzufügte.

%Vor%

Wenn Ihre Standardroute keine ID enthält, können Sie auch versuchen:

%Vor%     
Douglas Irwin 31.08.2014 02:16
quelle