La soluzione non è così semplice. È necessario avere la possibilità di richiamare la funzione di richiamata originale dopo aver premuto il pulsante OK della finestra di dialogo dell'interfaccia utente jQuery.
prima cosa è necessario una funzione js generalizzato per mostrare la finestra di dialogo:
function showConfirmRequest(callBackFunction, title, content)
{
$("#divConfirm").html(content).dialog({
autoOpen: true,
modal: true,
title: title,
draggable: true,
resizable: false,
close: function(event, ui) { $(this).dialog("destroy"); },
buttons: {
'Ok': function() { callBackFunction(); },
'Cancel': function() {
$(this).dialog("destroy");
}
},
overlay: {
opacity: 0.45,
background: "black"
}
});
}
ho supposto la presenza di un div come
<div id="divConfirm"></div>
su C# code-behind è necessario registrare il client precedente funzione, passando l'originale asp.net callbackFunction del tuo controllo come parametro (I generalizzato):
protected void AddConfirmRequest(WebControl control, string title, string message)
{
string postBackReference = Page.ClientScript.GetPostBackEventReference(control, String.Empty);
string function = String.Format("javascript:showConfirmRequest(function() {{ {0} }}, '{1}', '{2}'); return false;",
postBackReference,
title,
message);
control.Attributes.Add("onclick", function);
}
Tramite il metodo GetPostBackEventReference è possibile recuperare la funzione di postback che asp.net assegna al controllo.
Ora, il ripetitore ItemDataBound, recuperare il controllo che esegue l'eliminazione e passarlo a questa funzione:
<asp:Repeater ID="repeater" runat="server" OnItemDataBound="repeater_OnItemDataBound">
...
<ItemTemplate>
...
<asp:Button ID="btnDelete" runat="server" Text="Delete" />
...
</ItemTemplate>
</asp:Repeater>
e il codice:
protected void repeater_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
WebControl btnDelete = ((WebControl)e.Item.FindControl("btnDelete"));
AddConfirmRequest(btnDelete, "Confirm delete", "Are you sure? Really???");
}
}
Spero che questo aiuta.
Risposta eccellente è la risposta più comprensibile e più pulita della mia! –
Grazie, ho cercato di generalizzare molto possibile. Sto lavorando per mettere la soluzione su un controllo personalizzato, ignorando l'asp effettivo: pulsante – tanathos
postalo da qualche parte quando hai finito, e lascia qui una nota! –