ASP.Net MVC: Então aguarde ... A rota padrão parâmetro tem a ser nomeado id?
-
05-07-2019 - |
Pergunta
Tem mais alguém teve esse problema? Eu tenho que estar fazendo algo errado.
Então, eu sou a criação de uma rota para erros como este:
routes.MapRoute
(
"SharedError",
"Shared/Error/{error}",
new { error = "" }
);
E chamando como:
return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { error = errorMessage.ToString() }));
E no controlador:
public ActionResult Error(String error)
Simples direito? Bem, quando esta é realmente executado, o erro é nula, apesar da url parecendo:
/ Shared / Erro / ThisIsTheError
Mas o parâmetro erro no método de erro é nula. (E sim, eu tentei outras palavras)
Agora, se eu substituir tudo o que com a palavra 'id' tudo funciona.
Global.asax.cs
routes.MapRoute
(
"SharedError",
"Shared/Error/{id}",
new { id = "" }
);
Redirect:
return parentController.RedirectToRoute("SharedError", new RouteValueDictionary(new { id = errorMessage.ToString() }));
Controlador compartilhada:
public ActionResult Error(String id)
É id um deve ter palavra para todas as rotas, se você tem uma rota padrão levando-se em um valor?
Solução
Você sempre precisa especificar os parâmetros do controlador e ação:
routes.MapRoute
(
"SharedError",
"Shared/Error/{error}",
new { controller = "Shared", action="Error", error = "" }
);
Eu estou supondo que a razão pela qual a utilização os trabalhos de identificação para você é porque você tem a rota padrão ainda registrado, que tem id como um parâmetro e padrão valores para controlador e ação.
Note, se você ainda tem a rota padrão, certifique-se de adicionar o seu percurso antes -lo, caso contrário ele irá coincidir com o outro primeiro.