PostingBack da ModalPopup, ma mantenendolo visibile?
Domanda
Ho un ModalPopup che conterrà una griglia e 4 campi per inserire elementi nella griglia stessa.
È possibile postbackare sul server e aggiornare il gridview mantenendo aperto il modale?
Quando si inviano i campi e si verifica il postback, le chiusure modali lo hanno già fatto prima? Qualcuno ha menzionato una soluzione usando jQuery, ma questo era molto tempo fa.
Soluzione
La chiave per farlo sarà usare AJAX di qualche tipo: Microsoft.Ajax o jQuery Ajax. Se UpdatePanel non funziona, suggerirei di utilizzare jQuery per inviare nuovamente al server utilizzando AJAX. Ciò implicherebbe la creazione di un WebMethod per accettare il post AJAX sul lato server e la strumentazione del lato client con jQuery per inviare la richiesta / ricevere la risposta. Senza vedere il tuo HTML è un po 'difficile essere molto specifici.
Idea di base:
$(function() {
$('#modalSubmitButton').click( function() {
$.ajax({
url: 'path-to-your-web-method',
dataType: 'json', // or html, xml, ...
data: function() {
var values = {};
values['field1'] = $('#field1ID').val();
...
values['field4'] = $('#field4ID').val();
return values;
},
success: function(data,status) {
... update page based on returned information...
}
... error handling, etc. ...
});
return false; // stop any default action from the button clicked
});
});
Altri suggerimenti
Avvolgere il contenuto del popup (cioè non il popup stesso!) in un UpdatePanel ha funzionato per me.
I miei contenuti popup sono un pannello di ricerca con griglia di risultati ordinabile / paginabile. UpdatePanel mi ha dato il comportamento esatto che richiedo senza codice aggiuntivo.
Grazie a Patel Shailesh per l'idea.
<asp:Panel runat="server" ID="PopupPanel" Height="650" Width="900" Style="display: none">
<asp:UpdatePanel runat="server" ID="UpdatePanel1">
<ContentTemplate>
<!-- popup content -->
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
<ajax:ModalPopupExtender runat="server" ID="PopupExtender" PopupControlID="PopupPanel"
TargetControlID="PopupButton" />
<asp:Button runat="server" ID="PopupButton" Text="Popup" />
Non sono sicuro che funzioni, ma prova a inserire qualsiasi cosa nel modalpopup in un UpdatePanel
Per favore, se questo non mi odia dopo il tuo rilascio, odio anche i pannelli di aggiornamento
Una specie di brutta opzione è quella di forzare un postback quando si mostra il popup modale in primo luogo e si imposta un ViewState [" ModelPopupOn "] = true; e quindi controlla che sulla pagina venga caricato e infine postback di nuovo e impostalo su false / rimuovilo da viewstate quando chiudi il popup.
(questo tipo di problemi sono il motivo per cui odio il toolkit Ajax)
Stavo sperimentando il modalpopupextender e ho trovato una brutta soluzione. Se il pannello modale ha un pulsante che rende possibile il postback
<asp:Panel runat="server" ID="PopupPanel" Height="650" Width="900" Style="display: none">
<asp:Button ID="OkButton" runat="server" Text="OK" OnClick="OkBtn_Click" />
</asp:Panel>
Se OkBtn_Click nel code-behind ha una chiamata a:
System.Web.HttpContext.Current.Response.Write("<script></script>");
Quindi il modalpopupextender non è chiuso. Questo è successo anche a questo ragazzo: http://forums.asp.net/t/1591860.aspx