Pergunta

Eu olhei perguntas semelhantes sobre estouro de pilha, mas não foram capazes de encontrar a solução para este problema particular. Eu tenho um simples (não realmente, mas vamos fingir) página ASP.NET com um painel de atualização dentro dela.

Neste painel de atualização, há um controle HiddenField com um valor que será definido / atualizado através do meu próprio costume JavaScript. O valor é atualizado como eu posso ver no DOM usando o Firebug.

Além disso HiddenField há uma LinkButton que chama o JavaScript para modificar o valor do HiddenField usando OnClientClick (Isto funciona). O LinkButton também tem um manipulador de OnClick que é executado após o valor foi modificado.

No entanto, no manipulador OnClick, eu recebo o valor inicial do HiddenField e não o valor que foi definido pelo JavaScript!

Por que isso? É este um caso de " PEBKAC "?

EDIT: tentou a mesma coisa com um TextBox sem qualquer sucesso. Também tentei modificar o valor manualmente usando Firebug antes de enviar o formulário, sem qualquer sucesso.

EDIT 2: Eu só percebi que Page_Load é chamado antes do manipulador OnClick, que foi atrapalhando as coisas. Eu não vou apagar a questão como outras pessoas podem ter o mesmo problema e pode encontrar esta pergunta valioso.

Foi útil?

Solução

Você terá que fazê-lo usando o evento EndRequestHandler, fornecido pelo painel de atualização AJAX.

Por favor, olhe isso ->

http://www.codeproject.com/KB/ajax /AfterAjaxUpdate.aspx?display=Print

Outras dicas

Esta parece-me como se o viewstate faz de você uma piada de mau gosto (como muitas vezes). O que eu acho é que quando a página envia de volta, o campo oculto é inicializado com o valor contido no Viewstate.

Tente uma coisa: não acessar o valor diretamente através yourHiddenField.Value mas no OnInit da sua página de obtê-lo com Request.Forms[yourHiddenField.UniqueId] e lançá-lo para um HiddenField e extrair o valor. Eu não tenho certeza se esta é a sintaxe correta. Os valores de "destacados" deve estar na Request objeto em algum lugar, se bem me lembro. Veja se você obtém o valor lá. Se você chegar lá, o problema é o estado de visualização que é mapeado de volta após o evento OnInit da página. Então nós temos que encontrar uma solução para isso ...

Como você está gerando a nova entrada no cliente? Seria possível realizar isso no servidor em vez disso?

Desta forma, você pode usar o apenas o OnClick em vez de tanto o OnClick e OnClientClick.

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