none
Passar parametros e redirecionar a view. ASP.NET MVC RRS feed

  • Pergunta

  • Pessoal,

    Eestou trabalhando com ASP.NET MVC 3, 

    Tenho 1 View a qual eu tenho vários produtos com checkbox para cada produto.
    O usuário vai poder marcar até 4 produtos onde os ids dos produtos serão passados voa ajax para uma action.

    Após isso, nesta actionresult ele vai preencher alguns Models e após isso eu preciso que a view seja redirecionada para outra view junto com os parametros.

    Estou tentando fazer isso e não consigo.

    • Movido Olavo Oliveira Neto segunda-feira, 12 de março de 2012 15:24 Estou movendo sua questão para o fórum especifico de MVC (De:.NET Development - Geral)
    segunda-feira, 12 de março de 2012 14:51

Respostas

  • Olá Rodrigo, beleza?

    tente fazer isso na sua actionresult!

    return RedirectToAction("Nome da sua View", new seus parametros); ou usa o RedirectToRouteResult

    Abraço


    Visite meu blog -> www.wescley.net Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta


    segunda-feira, 12 de março de 2012 16:29
  • Boa tarde.

    Segue exemplo totalmente funcional:

    http://weblogs.asp.net/imranbaloch/archive/2011/09/13/webgrid-helper-with-check-all-checkboxes.aspx


    Consultoria .NET
    ANALISTA DESENVOLVEDOR
    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.
    Blog .Net Descomplicado

    • Marcado como Resposta Rodrigo Epic quinta-feira, 15 de março de 2012 19:26
    segunda-feira, 12 de março de 2012 17:26
  • Bom dia Rodrigo,

    Você não precisa passar os ids dos 4 produtos via ajax, pois pelo que eu entendi depois de você mandar os ids para a action ele ira preencher alguns models e enviar o usuario para outra view, ou seja, vai gerar um redirecionamento.

    Com ajax isto não é possivel, pois o ajax vai passar os dados assincronicamente para o controller e o browser não detecta que houve mudança de pagina por não haver um novo carregamento com novo fluxo de informações.

    • Marcado como Resposta Rodrigo Epic quinta-feira, 15 de março de 2012 19:26
    terça-feira, 13 de março de 2012 14:31
  • Ola rodrigo,

    realmente você tera que usar o BeginForm para gerar um formulario que ira mandar os ids para seu controller, caso não conheça a sintax do BeginForm segue um exemplo abaixo + link detalhado:

    @using(Html.BeginForm())
    {
    //dados do formulario
    }
    

    ou

    @using(Html.BeginForm("nomeDaAction", "nomeDoController"))
    {
    //dados do formulario
    }

    http://msdn.microsoft.com/pt-br/library/dd410596.aspx

    espero ter ajudado

    Abraços

    • Marcado como Resposta Rodrigo Epic quinta-feira, 15 de março de 2012 19:26
    quarta-feira, 14 de março de 2012 03:55
  • Mas voce quer redirecionar o usuário ou só exibir uma view diferente?

    Faço essa pergunta porque se voce quer redirecionar, entao porque o post tem que ser em ajax?

    Nem entendi bem o propósito. Mas se prentende redirecionar o usuário para outra action faça o que o Wescley sugeriu:

    return RedirectToAction("Nome da sua ACTION", new seus parametros);

    Isso sem usar ajax!

    Agora se pretende apenas exibir uma View diferente carregada via ajax basta usar o que vc postou:

    Return View("Nome da nova View", model);

    Agora se ainda sim voce quiser por algum motivo obscuro redirecionar a pagina após carregar o ajax, voce pode retornar um JSON com um propriedade para redirecionar e redirecionar a pagina via javascript.

    ex: return Json(new { redirecionar = true, data = MODEL});

    Abs,


    Wladiston Paiva - @wladiston - Microsoft MCTS, MTA

    • Marcado como Resposta Rodrigo Epic quinta-feira, 15 de março de 2012 19:26
    quinta-feira, 15 de março de 2012 14:53
  • Entendi agora! Então faça o seguinte: use o Ajax.BeginForm no form dos filtros para recuperar os imoveis e o Html.BeginForm para dar o post na action "comparar".

    :)


    Wladiston Paiva - @wladiston - Microsoft MCTS, MTA

    • Marcado como Resposta Rodrigo Epic quinta-feira, 15 de março de 2012 20:25
    quinta-feira, 15 de março de 2012 19:48
  • Rodrigo,

    O seu foreach é javscript? ou uma view?
    Bem, por padrão, o navegador nao envia os dados dos checkbox nao selecionados.

    Então os checks que voce receber na sua action já serão os checks selecionados. Basta colocar todos os checks com o mesmo e na action colocar um parametro array, tipo:

    public ActionResult Comparar(int[] IdImovel);

    <input type="checkbox" name="IdImovel" value="XX" />

    Abs!


    Wladiston Paiva - @wladiston - Microsoft MCTS, MTA

    • Marcado como Resposta Rodrigo Epic sexta-feira, 16 de março de 2012 21:27
    sexta-feira, 16 de março de 2012 18:13

Todas as Respostas

  • Olá Rodrigo, beleza?

    tente fazer isso na sua actionresult!

    return RedirectToAction("Nome da sua View", new seus parametros); ou usa o RedirectToRouteResult

    Abraço


    Visite meu blog -> www.wescley.net Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta


    segunda-feira, 12 de março de 2012 16:29
  • Boa tarde.

    Segue exemplo totalmente funcional:

    http://weblogs.asp.net/imranbaloch/archive/2011/09/13/webgrid-helper-with-check-all-checkboxes.aspx


    Consultoria .NET
    ANALISTA DESENVOLVEDOR
    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como resposta.
    Blog .Net Descomplicado

    • Marcado como Resposta Rodrigo Epic quinta-feira, 15 de março de 2012 19:26
    segunda-feira, 12 de março de 2012 17:26
  • Bom dia Rodrigo,

    Você não precisa passar os ids dos 4 produtos via ajax, pois pelo que eu entendi depois de você mandar os ids para a action ele ira preencher alguns models e enviar o usuario para outra view, ou seja, vai gerar um redirecionamento.

    Com ajax isto não é possivel, pois o ajax vai passar os dados assincronicamente para o controller e o browser não detecta que houve mudança de pagina por não haver um novo carregamento com novo fluxo de informações.

    • Marcado como Resposta Rodrigo Epic quinta-feira, 15 de março de 2012 19:26
    terça-feira, 13 de março de 2012 14:31
  • Opa obrigado pela atenção de todos.

    Ainda não consegui resolver meu problema, mas estou na luta :D

    Então como está hoje:
    Eu pego os IDS dos checks selecionados e passo para minha Action por AJAX  do tipo POST.

    Na minha Action ele preenche a model.

    Quando eu tento fazer utilizando o exemplo abaixo, ele até consegui depurar e chegar a nova View chamada "ComprarImoveis", porém a página não é redirecionada.

    Return View("Nome da nova View", model);

    • Editado Rodrigo Epic terça-feira, 13 de março de 2012 18:34
    terça-feira, 13 de março de 2012 18:31
  • Wescley Carlos Fernandes, realmente desde modo não consegui =( vlw pela ajuda
    terça-feira, 13 de março de 2012 18:35
  • Edson.Junior, achei interessante vou olhar muito obrigado :D
    terça-feira, 13 de março de 2012 18:35
  • Oliveira Felipe, pois é. Eu não sabia. Um amigo disse que eu teria que usar BeginsForms, 

    Só que este problema me parece tão simples. Eu já estou em uma ActionResult com meus ids e preciso apenas carregar uma nova View junto com o model

    terça-feira, 13 de março de 2012 18:37
  • Ola rodrigo,

    realmente você tera que usar o BeginForm para gerar um formulario que ira mandar os ids para seu controller, caso não conheça a sintax do BeginForm segue um exemplo abaixo + link detalhado:

    @using(Html.BeginForm())
    {
    //dados do formulario
    }
    

    ou

    @using(Html.BeginForm("nomeDaAction", "nomeDoController"))
    {
    //dados do formulario
    }

    http://msdn.microsoft.com/pt-br/library/dd410596.aspx

    espero ter ajudado

    Abraços

    • Marcado como Resposta Rodrigo Epic quinta-feira, 15 de março de 2012 19:26
    quarta-feira, 14 de março de 2012 03:55
  • Mas voce quer redirecionar o usuário ou só exibir uma view diferente?

    Faço essa pergunta porque se voce quer redirecionar, entao porque o post tem que ser em ajax?

    Nem entendi bem o propósito. Mas se prentende redirecionar o usuário para outra action faça o que o Wescley sugeriu:

    return RedirectToAction("Nome da sua ACTION", new seus parametros);

    Isso sem usar ajax!

    Agora se pretende apenas exibir uma View diferente carregada via ajax basta usar o que vc postou:

    Return View("Nome da nova View", model);

    Agora se ainda sim voce quiser por algum motivo obscuro redirecionar a pagina após carregar o ajax, voce pode retornar um JSON com um propriedade para redirecionar e redirecionar a pagina via javascript.

    ex: return Json(new { redirecionar = true, data = MODEL});

    Abs,


    Wladiston Paiva - @wladiston - Microsoft MCTS, MTA

    • Marcado como Resposta Rodrigo Epic quinta-feira, 15 de março de 2012 19:26
    quinta-feira, 15 de março de 2012 14:53
  • Muito obrigado Oliveira Felipe, estou fazendo em BeginsForms.

    Wladiston Paiva,  então vou explicar como funciona:

    O sistema que estou montando basicamente é um sistema imobiliário.

    1º O cliente vai fazer uma consulta com filtros informando se o imóvel é do tipo apartamento, casa, número de quartos, valor e etc.

    2º Depois de fazer este filtro, a página vai carregar com todos os imóveis e com um checkbox no canto. 

    3º O cliente vai poder marcar até 4 produtos e clicar em um botão chamado "comparar imóveis".

    4º Após isso, será carregada outra página com todos os imóveis a quais foram marcados, que pode ser no mínimo 2 ou no máximo 4.

    Então basicamente o meu problema seria apenas enviar para uma ActionResult todos os ids que foram marcados, e com base nestes ids eu preencho meus objetos na Model e depois devolvo para outra View. Ou seja o cliente está em uma página e realmente vai ser redirecionado para outra página com os os detalhes completos dos imóveis.


    Veja o exemplo que quero fazer igual o site da Tecnisa: http://www.tecnisa.com.br/imoveis.html

    Basta marcar 2 imóveis e clicar no botão "Comparar imóveis".


    Em web forms consigo fazer de boa, em web forms que estou com este probleminha, mas estou seguindo as orientações do pessoal em fazer com BeginsForms.

    Vou fazer assim:


    Criar o BeginsForms, depois colocar o foreach que vai preenchar todos os produtos e criar no final um campo hidden. Com o Jquery vou validar o mínimo e o máximo selecionado e depois pegar o value todos ids selecionados e setar no controle hidden dentro do BeginsForms. Após isso faço o post para o servidor.

    quinta-feira, 15 de março de 2012 19:25
  • Entendi agora! Então faça o seguinte: use o Ajax.BeginForm no form dos filtros para recuperar os imoveis e o Html.BeginForm para dar o post na action "comparar".

    :)


    Wladiston Paiva - @wladiston - Microsoft MCTS, MTA

    • Marcado como Resposta Rodrigo Epic quinta-feira, 15 de março de 2012 20:25
    quinta-feira, 15 de março de 2012 19:48
  • Muito obrigado Wladiston Paiva :D
    quinta-feira, 15 de março de 2012 20:26

  • Wladiston Paiva
    , por favor.

    Eu tenho uma dúvida:

    Eu tenho o meu BeginForms, e nele eu tenho o Foreach que carrega todos os produtos com o checkbox.

    Na minha Action eu tenho os parametros que recebe.
    como eu posso enviar somente os checkbox que foram marcados

    Abraços?
    sexta-feira, 16 de março de 2012 00:01
  • Rodrigo,

    O seu foreach é javscript? ou uma view?
    Bem, por padrão, o navegador nao envia os dados dos checkbox nao selecionados.

    Então os checks que voce receber na sua action já serão os checks selecionados. Basta colocar todos os checks com o mesmo e na action colocar um parametro array, tipo:

    public ActionResult Comparar(int[] IdImovel);

    <input type="checkbox" name="IdImovel" value="XX" />

    Abs!


    Wladiston Paiva - @wladiston - Microsoft MCTS, MTA

    • Marcado como Resposta Rodrigo Epic sexta-feira, 16 de março de 2012 21:27
    sexta-feira, 16 de março de 2012 18:13
  • Muitissimoooo obrigado Wladiston Paiva, era exatamente isto :D

    Eu estava fazendo desta forma:
    @Html.CheckBox("IdImovel", false, new { @value = @item.ImovelId, @class = "checkCompara" })

    Mas ele estava aplicando o value, ou seja o id do produto no name.

    Fiz conforme sua ajuda e funcionou perfeitamente.
    <input type="checkbox" name="IdImovel" value="@item.ImovelId" />

    Vlw :D

    sexta-feira, 16 de março de 2012 21:27