Usuário com melhor resposta
Rotas customizadas

Pergunta
-
Por exemplo, eu tenho a seguinte rota
[RoutePrefix("imovel")]
public class imovelController : Controller
{
[Route("{negocio?}/{tipo?}/{cidade?}")]
public ActionResult Index(string negocio, string tipo, string cidade)
{
return View();
}
}Se eu chamar
- site.com.br/imovel
- site.com.br/imovel/venda (correto, é o negocio venda)
- site.com.br/imovel/venda/casa (correto)
- site.com.br/imovel/venda/casa/sao-paulo (correto)
- site.com.br/imovel/casa (errado, é o tipo, mas quero que funcione que chame o tipo ao invés de negocio)
Como eu posso identificar qual a rota correta? Corrigir para que ao enviar o dado ele encontre a rota correta?
- Editado CEFL terça-feira, 28 de abril de 2015 18:23
Respostas
-
Recomendo você dar uma olhadinha nos treinamentos do Renato Haddad pois fala exatamente como construir rotas alternativas.
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
- Marcado como Resposta CEFL quarta-feira, 6 de maio de 2015 13:05
Todas as Respostas
-
Tente criar duas actions:
[RoutePrefix("imovel")] public class imovelController : Controller { [Route("{negocio?}/{tipo?}/{cidade?}")] public ActionResult Index(string negocio, string tipo, string cidade) { return View(); } [Route("{tipo?}/{cidade?}")] public ActionResult Index2(string tipo, string cidade) { return View(); // ou return RedirectToAction("Index"); } }
Outra forma seria vc mapear as rotas como descrito aqui http://stackoverflow.com/questions/1045316/asp-net-mvc-ambiguous-action-methods#answer-1045374
Att. Andre de Mattos Ferraz
- Editado André de Mattos Ferraz terça-feira, 28 de abril de 2015 18:57
-
Eu criei duas rotas, mas conflita já que são 2 parâmetros, minha ideia é ter um filtro semelhante ao da OLX. Eu estou indo pelo caminho errado?
Ou o que eles fazem é ter tudo mapeado na mão ao invés de ser dinâmico?
[Route("{tipo?}/{cidade?}")] public ActionResult Index2(string tipo, string cidade) { return View(); // ou return RedirectToAction("Index"); }
[Route("{negocio?}/{tipo?}")] public ActionResult Index2(string tipo, string cidade) { return View(); // ou return RedirectToAction("Index"); }
-
O MVC não suporta overload de métodos baseado SOMENTE na assinatura. A única forma que eu vejo é mapear essa rota na mão conforme o link que passei. Posso estar errado, talvez alguem saiba outra forma, eu somente não sei mesmo.
Att. Andre de Mattos Ferraz
-
Recomendo você dar uma olhadinha nos treinamentos do Renato Haddad pois fala exatamente como construir rotas alternativas.
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
- Marcado como Resposta CEFL quarta-feira, 6 de maio de 2015 13:05