Passando dados para o código do servidor de um controle do lado do cliente utilizando ASP.NET AJAX
-
05-07-2019 - |
Pergunta
Eu tenho um ListView em uma página que exibe uma lista de widgets. Quando um usuário clica em um dos itens na lista, eu quero mostrar um ModalPopup que contém controles que permitem o usuário a operar no item que selecionado.
Eu poderia facilmente fazer isso colocando um painel e um ModalPopupExtender no ItemTemplate do ListView, mas este conjunto uma média de controles ocultos para cada widget, que maciçamente inchaço do tamanho da página. (Não vão ser alguns controles bastante pesado lá.) Em vez disso eu quero reutilizar uma única ModalPopup para cada um dos widgets na lista.
Eu fiz alguma pesquisa, mas eu não encontrei nada que se aplica diretamente para a minha situação antes. Pelo que tenho sido capaz de descobrir, no entanto, eu tenho que fazer algo como isto:
- Coloque um painel e um ModalPopupExtender na página dentro de um UpdatePanel.
- Criar um controle de usuário
WidgetManipulator
personalizado que tem uma propriedadeWidgetID
. Coloque isso no painel, junto com um par OK botões / Cancelar. - Em Javascript na página, anexar um manipulador de clique para cada widget na ListView que desencadeia uma nova postagem no UpdatePanel.
- No evento
UpdatePanel_Load
no servidor, exibir o ModalPopup e defina o propetyWidgetID
naWidgetManipulator
ao ID do widget clicado. - No evento
OKButton_Click
ou eventoCancelButton_Click
no servidor, esconder o ModalPopup. Se OKButton foi clicado, chamadaWidgetManipulator.SaveChanges()
primeiro.
A parte que eu ainda não descobri é: Como diabos eu sei o widget foi clicado, e como faço para passar isso de volta para o servidor quando eu atualizar a UpdatePanel? É este mesmo o caminho certo em tudo?
Solução
Quando eu preciso para transmitir dados do cliente para o servidor na ASP.NET AJAX, eu geralmente usar um asp: HiddenField com runat = "server". Ambos podem vê-lo livremente, mas cuidado com potencial asynchronicity postagem.
Parece que você precisa para notificar o servidor o widget foi clicado - Você pode usar um timer para postback; ou eu iria com a opção 5.
Outras dicas
Se você pode usar jQuery em vez disso você poderia fazer algo ao longo das linhas dessas duas mensagens: