ASP.Net MVC: Então aguarde ... A rota padrão parâmetro tem a ser nomeado id?

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

  •  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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top