asp.net/ajax personalizado controle modelo, mostrar / ocultar itens com espaço reservado

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

Pergunta

Eu tenho um costume templated controle (barra de ferramentas) que contém um usercontrol personalizado (botão) A usos botão jQuery para estilo e gerir a estados / postbacks / não = postbacks etc.

Alguns dos botões estão escondidos com um espaço reservado e são exibidos quando bater em um dos botões.

Todos os botões com relação jQuery parecem ser iniciada no postback (ajax estilo dentro de um UpdatePanel usando o PageRequestManager) no entanto, o viewstate é perdido nos botões tornada invisível pelo espaço reservado.

Parece ser um problema é específico para o estado de visualização e botões no espaço reservado no controle modelo. Isso normalmente funciona em um ambiente não-ajax, eu suspeito que eu estou faltando alguma coisa.

Todos os comentários que me Get que pensa apreciado.

O código está localizado em várias partes e provavelmente não vale a pena colar uma vez que será completamente desligado (eu sei que isso ajuda doesnt)

Foi útil?

Solução

Eu sinto que preciso para responder a minha própria pergunta aqui:

Em vez de usar espaços reservados ou divs com css, UpdatePanels são prestados em qualquer um div ou uma extensão dependendo da opção de renderização. Neste caso apenas esconder a div ou span que o UpdatePanel cria em vez de tentar ocultar / mostrar a um novo recipiente externo.

Outras dicas

Se bem me lembro, controles ASP.NET não terminar seu ciclo de vida se eles têm conjunto visível para false. Ou seja, coisas como Render () não são chamados, e ViewState deve ser uma daquelas coisas (que faz sentido). Usando painéis de atualização juntamente com AJAX / Javascript também é uma coisa muito complicado, e não funciona muito bem. Este é apenas como controles ASP.NET e o trabalho painel de atualização.

A minha sugestão é para tanto painéis de uso Update ou o uso de javascript, e não ambos.

Você pode facilmente imitar o que atualizar painéis fazer usando jQuery $ .post / get e substituindo um trecho de código com o html retornado de uma chamada de serviço web.

function myButtonClick(event){
    $.post("path/to/webservice", {data1: "data1"}, function(data, status){
        $("#myPanel").replaceWith(data);
    });
}

Você acabará por correr em outras questões também, se você tem um JS anexados ao código que é atualizado através de um painel de atualização. Ex: Se você tem uma lista de itens que cada um tem JS que lhes são inerentes, como um dos controles ASP.NET AJAX Control Toolkit, e você eliminar um destes a partir da página usando um painel de atualização, a JS usado para ligar o controles para cima vai estar fora de sincronia.

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