none
Onde está o erro no código? RRS feed

  • Pergunta

  • Boa tarde pessoal,

    Não sei onde estou errando ou se está faltando algo, já fiz um código parecido, mas este não está funcionando. Tenho todas as Views criadas, mas não estou conseguindo passar o parâmetro para Details, sempre retorna Null quando digito na URL: http://localhost:30535/Details/Brasil

    Não é para ele passar para a string pais "Brasil "para o método Details?

    namespace AppCapitulo3.Controllers
    {
        public class HomeController : Controller
        {
            //
            // GET: /Home/

            List<Paises> lst = new List<Paises>
            {
                new Paises{Nome="Brasil", Continente="América do Sul", Idioma="Português"},
                new Paises{Nome="Alemanha", Continente="Europa", Idioma="Alemão"},
                new Paises{Nome="Austrália", Continente="Oceania", Idioma="Inglês"},
                new Paises{Nome="Uruguai", Continente="América do Sul", Idioma="Espanhol"},
                new Paises{Nome="Japão", Continente="Ásia", Idioma="Japonês"}
            };

            public ActionResult Index()
            {
                return View();
            }

            public ActionResult List()
            {
                return View(lst);
            }

            public ActionResult Details(string pais)
            {
                if (pais == null) return View("NotFound");

                var model = (from p in lst.Where(x => x.Nome == pais)
                             select p).FirstOrDefault();

                if (model == null) return View("NotFound");

                return View(model);
            }

        }
    }

    quinta-feira, 12 de junho de 2014 17:56

Respostas

  • Parceiro, suas rotas não conhecem o parâmetro pais. tanto que se você colocar com querystring vai funcionar (http://localhost:30535/Details?pais=Brasil).

    Crie uma rota personalizada para essa caso:

    routes.MapRoute(
                    name: "DetalhePais",
                    url: "{controller}/{action}/{pais}",
                    defaults: new { controller = "Home", action = "Details", pais = UrlParameter.Optional }
                );

    algo do tipo

    • Sugerido como Resposta Raphael Heitor sexta-feira, 13 de junho de 2014 13:46
    • Marcado como Resposta LWMN sábado, 14 de junho de 2014 03:53
    sexta-feira, 13 de junho de 2014 13:46

Todas as Respostas

  • Olá,

     se o seu parametro estiver sendo passado corretamente, retorna a View com o nome veja :

     if (pais == null) return View("NotFound");
    
                var model = (from p in lst.Where(x => x.Nome == "Brasil")
                             select p).FirstOrDefault();
    
                if (model == null) return View("NotFound");
    
                return View("Details",model);

    sexta-feira, 13 de junho de 2014 10:55
  • O que pode estar errado é o mapeamento das suas rotas,

    verifica que a configuração das rotas está da forma correta (qualquer coisa coloca elas aqui).

    sexta-feira, 13 de junho de 2014 12:37
  • Amigo está correto,

     como está suas rotas no Global asax ?

    sexta-feira, 13 de junho de 2014 12:39
  • Parceiro, suas rotas não conhecem o parâmetro pais. tanto que se você colocar com querystring vai funcionar (http://localhost:30535/Details?pais=Brasil).

    Crie uma rota personalizada para essa caso:

    routes.MapRoute(
                    name: "DetalhePais",
                    url: "{controller}/{action}/{pais}",
                    defaults: new { controller = "Home", action = "Details", pais = UrlParameter.Optional }
                );

    algo do tipo

    • Sugerido como Resposta Raphael Heitor sexta-feira, 13 de junho de 2014 13:46
    • Marcado como Resposta LWMN sábado, 14 de junho de 2014 03:53
    sexta-feira, 13 de junho de 2014 13:46