ASP.NET: JavaScript modificando o valor de um campo oculto antes de enviar
-
08-07-2019 - |
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.
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
.