none
mesmo parcialview valores diferentes RRS feed

  • Pergunta

  • Boa noite pessoal,

    1 - eu carrego 2 vezes o mesmo ParcialView em uma outra View principal index.cshtml via Ajax.

    2 - a cada chamada eu envio uma variavel data_1 diferente para essa parcialview e passo essa variavel via viewbag para dentro da view da parcialview.

    3 - para saber se realmente passou essa variavel eu mando imprimir na tela em uma div "div_0" que carregado via viewbag.data_1, e dentro dessa div mostra as 2 variaveis tudo ok: __A e depois __B.

    AGORA VEM O PROBLEMA

    Mostrou os valores corretos nas divs ok, mas eu coloquei um botão tambem para me mostrar via alert() o viewbag ATUAL porem quando clico nesse botão ele somente traz somente o valor do ultimo viewbag processado ou seja nos 2 botões o alert() é sempre o valor __A ou sempre o valor __B , eu esperava que cada botão desse a sua variavel, ou seja, botão 1 o valor __A, botão 2 o valor__B ,  o codigo abaixo mostra o problema que estou tendo: 

    // meu parcialview -------------------------
    <script>
    var _var_1 = '@(ViewBag.data_1)';
       $(document).ready(function () {     
              $("#btn_" + _var_1 + "").click(function () {
                  alert(_var_1);
            });
              
              });
    </script>
    <div id="div_0_@(ViewBag.data_1)">@(ViewBag.data_1)</div>
    <input type="button" value="@(ViewBag.data_1)" id="btn_@(ViewBag.data_1)" />
    //--------------------------------------------
    // meu controller ----------------------
       public ActionResult _call_0(string data1)
            {
                ViewBag.data_1  = data1;
              
                return PartialView();
                    
            }
    //-----------------------------------------
    // Load ParcialView via Ajax na minha view principal: Index.cshtml -----------
    <script>
    _load_0("__A"); // aqui eu mando a variavel __A _load_0("__B");//aqui eu mando a variavel __B function _load_0(data_1) { var url = "_call_0"; xhr = $.ajax({ url: url, data: { data1: data_1 }, type: 'GET', cache: false, dataType: 'html' }) .success(function (result) { if (data_1 == "__A") { $('#div_A').html(result); } if (data_1 == "__B") { $('#div_B').html(result); } }) } </script> <div id="div_A"></div> <div id="div_B"></div> //--------------------------------------------------------------------------





















    quarta-feira, 10 de outubro de 2012 00:57

Respostas

  • Então, se voce colocar o codigo para rodar voce vai visualizar o problema, voce viu que eu atribui o valor da viewbag nas ids dos controles, isso por que eu vou trabalhar com jquery lá dentro dinamico, eu queria que que ficasse igual a um usercontrol do webforms, ou seja os valores isolados, se voce clicar no botão do meu exemplo ele vai trazer o valor da ultima variavel atribuida ao viewbag, e cada botão deveria trazer a sua variavel mas não traz, é como se a viewbag fosse unica para a chamada 1 e chamada 2.

    tentei dessa maneira tambem passando para um model:

      @Html.Partial("_call_0", new Models.call_0_Model("__A"), new ViewDataDictionary(ViewData)
    {
           TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "data1"}
      })

      @Html.Partial("_call_0", new Models.call_0_Model("__B"), new ViewDataDictionary(ViewData)
    {
           TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "data2"}
      })

    mas sem sucesso tambem.

    quarta-feira, 10 de outubro de 2012 03:03

Todas as Respostas

  • Poe virgula nesse texto aí amigo :(

    Se sua questão foi respondida, favor marcar.

    André Baltieri
    MTAC – Microsoft Technical Audience Contributor

    Twitter: @andrebaltieri
    Blog: http://andrebaltieri.net
    Site: http://sismat.com.br

    quarta-feira, 10 de outubro de 2012 01:40
  • Boa Noite Andre, vou tentar melhorar o texto, voce entendeu o codigo? obrigado pela atenção.

    quarta-feira, 10 de outubro de 2012 01:44
  • Desculpa a brincadeira. Não entendi o texto.
    Se der, descreve melhor o que quer fazer.

    Abraços,


    Se sua questão foi respondida, favor marcar.

    André Baltieri
    MTAC – Microsoft Technical Audience Contributor

    Twitter: @andrebaltieri
    Blog: http://andrebaltieri.net
    Site: http://sismat.com.br

    quarta-feira, 10 de outubro de 2012 01:47
  • Tranquilo, eu que agradeço a atenção, estou tentando melhorar o texto :)

    quarta-feira, 10 de outubro de 2012 02:19
  • oi andre, esta confuso ainda?
    quarta-feira, 10 de outubro de 2012 02:38
  • Desculpa mas ainda estou.
    1 - O que você quer fazer carregando duas partials? Uma saída para carregar uma partial Assíncrona é o seguinte:
    public ActionResult CarregaPartial() { return PartialView("SuaPartial"); }
    Na view:
    @using(Ajax.BeginForm("Home", "CarregaPartial", new AjaxOptions {... })){
    <input type="submit" value="Abre partial" />

    Definido isso, você pode passar valores diretamente para as partials no controller.
    return PartialView("Sua Partial", objeto);

    Assim você tem tudo mais organizado, não precisa ficar misturando JavaScript com ViewBag nas views.

    Acho que se você passar o contexto posso te ajudar melhor!

    Abraços,


    Se sua questão foi respondida, favor marcar.

    André Baltieri
    MTAC – Microsoft Technical Audience Contributor

    Twitter: @andrebaltieri
    Blog: http://andrebaltieri.net
    Site: http://sismat.com.br

    quarta-feira, 10 de outubro de 2012 02:51
  • Então, se voce colocar o codigo para rodar voce vai visualizar o problema, voce viu que eu atribui o valor da viewbag nas ids dos controles, isso por que eu vou trabalhar com jquery lá dentro dinamico, eu queria que que ficasse igual a um usercontrol do webforms, ou seja os valores isolados, se voce clicar no botão do meu exemplo ele vai trazer o valor da ultima variavel atribuida ao viewbag, e cada botão deveria trazer a sua variavel mas não traz, é como se a viewbag fosse unica para a chamada 1 e chamada 2.

    tentei dessa maneira tambem passando para um model:

      @Html.Partial("_call_0", new Models.call_0_Model("__A"), new ViewDataDictionary(ViewData)
    {
           TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "data1"}
      })

      @Html.Partial("_call_0", new Models.call_0_Model("__B"), new ViewDataDictionary(ViewData)
    {
           TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "data2"}
      })

    mas sem sucesso tambem.

    quarta-feira, 10 de outubro de 2012 03:03
  • Ué, funcionou agora? Coloca como resolveu...

    Abraços,


    Se sua questão foi respondida, favor marcar.

    André Baltieri
    MTAC – Microsoft Technical Audience Contributor

    Twitter: @andrebaltieri
    Blog: http://andrebaltieri.net
    Site: http://sismat.com.br

    quarta-feira, 10 de outubro de 2012 17:10
  • sim, fiz dessa forma e ao invez de atribuir a uma variavel dentro do javascript eu repeti em todos os lugares que deveria trazer o valor assim @model.variavel e funcionou, obrigado pela atenção!
    quarta-feira, 10 de outubro de 2012 18:11