ASP.Net MVC: quindi aspetta & # 8230; Il parametro di instradamento predefinito deve essere denominato id?

StackOverflow https://stackoverflow.com/questions/1004331

  •  05-07-2019
  •  | 
  •  

Domanda

Qualcun altro ha avuto questo problema? Devo fare qualcosa di sbagliato.

Quindi sto impostando un percorso per errori come questo:

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{error}",
 new { error = "" }
);

E chiamando come:

return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { error = errorMessage.ToString() }));

E sul controller:

public ActionResult Error(String error)

Semplice vero? Bene, quando questo viene effettivamente eseguito, l'errore è nullo nonostante l'URL assomigli a:

/ Shared / Errore / ThisIsTheError

Ma il parametro error nel metodo Error è null. (E sì, ho provato altre parole)

Ora, se lo sostituisco con la parola "id", tutto funziona.

Global.asax.cs

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{id}",
 new { id = "" }
);

Redirect:

return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { id = errorMessage.ToString() }));

Controller condiviso:

public ActionResult Error(String id)

ID è una parola obbligatoria per tutte le rotte se hai una route predefinita che accetta un valore?

È stato utile?

Soluzione

Devi sempre specificare i parametri del controller e dell'azione:

routes.MapRoute
(
 "SharedError",
 "Shared/Error/{error}",
 new { controller = "Shared", action="Error", error = "" }
);

Suppongo che il motivo per cui l'utilizzo di id funzioni per te sia perché hai ancora la route predefinita registrata, che ha id come parametro e valori predefiniti per controller e azione.

Nota, se hai ancora il percorso predefinito, assicurati di aggiungere il percorso prima , altrimenti corrisponderà prima all'altro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top