Domanda

Sto lavorando a un'applicazione ASP.NET MVC e mi sono imbattuto in una cosa strana.

Ho due azioni del controller come questa:

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

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

Per prima cosa chiamo l'azione Review con null come parametro, questo farà apparire una pagina web con un elenco di elementi.Gli elementi vengono ricollegati alla prima azione Review con l'ID impostato.

Quando l'ID è stato fornito all'azione di revisione, verrà restituita una pagina web di modifica per questo articolo.Quando si preme invia dopo alcune modifiche, ci ritroveremo nella seconda azione Review (post).Qui l'elemento verrà salvato.

Finora tutto bene.

Ora, nell'ultima azione Review (post) ho ricevuto il seguente codice alla fine:

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

Questo attiverà di nuovo la prima azione di revisione, il problema è che fornirà l'ID precedente?Il mio pensiero era che RedirectToAction non fornirà alcun parametro?

È stato utile?

Soluzione

Il mio pensiero era che RedirectToAction non fornirà alcun parametro?

La tua comprensione è sbagliata.I parametri presenti nello stato del modello vengono inoltrati automaticamente se l'URL di destinazione contiene un parametro di route con lo stesso nome.In questo caso hai un parametro id che viene pubblicato (probabilmente come parte di un campo di input o parte dell'URL) e quando reindirizzi all'azione Index originale, perché le tue definizioni di percorso hanno un token id alla fine del RedirectToActionil metodo lo riempirà.

Come soluzione alternativa per evitare questo comportamento, potresti specificare esplicitamente che il parametro id non deve essere inviato durante il reindirizzamento:

return RedirectToAction("Index", "Ad", new { id = "" });
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top