Ho un UpdatePanel ASP.NET con il seguente:jQuery Dialog 'Close' in conflitto con ASP.NET UpdatePanel
<asp:UpdatePanel ID="UpdatePanel3" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<%-- jQuery dialog - Suppliers --%>
<div id="divSuppliers" style="display: none;">
<asp:ListBox ID="lstSuppliers" runat="server" SelectionMode="Single" Rows="10" Width="100%"
DataValueField="SupplierID" DataTextField="SupplierName">
</asp:ListBox>
<br /><br />
<asp:Button ID="btnSelectSupplier" runat="server" Text="Select 2" OnClick="btnSelectSupplier_Click" />
</div>
<asp:GridView ID="gvSuppliers" runat="server" AutoGenerateColumns="false" SkinID="gvSkin"
DataKeyNames="SupplierID" EmptyDataText="No Existing User Roles">
<Columns>
<asp:TemplateField HeaderText="Supplier Name">
<ItemTemplate>
<asp:Label ID="lblSupplierName" runat="server" Text='<%# Eval("SupplierName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="btnAddSupplier" runat="server" Text="Add Supplier"
Visible="false" OnClick="btnAddSupplier_Click" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSelectSupplier" />
</Triggers>
</asp:UpdatePanel>
abbastanza semplice, in realtà. Nient'altro che un div che uso per il mio jQuery Dialog popup, un controllo GridView di ASP.NET con una singola colonna e un pulsante ASP.NET per i postback asincroni.
Ecco l'evento click che gestisce il postback asincrono per btnSelectSupplier.
protected void btnSelectSupplier_Click(object sender, EventArgs e) {
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=
// WORKS JUST FINE
List<SupplierItem> suppliers = new List<SupplierItem>();
foreach (int i in lstSuppliers.GetSelectedIndices()) {
suppliers.Add(
new SupplierItem { SupplierID = Convert.ToInt32(lstSuppliers.Items[i].Value), SupplierName = lstSuppliers.Items[i].Text });
lstSuppliers.Items[i].Selected = false;
}
gvSuppliers.DataSource = suppliers;
gvSuppliers.DataBind();
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=
// DOES NOT WORK!!
string jq = "$('#divSuppliers').dialog('close');";
ScriptManager sm = ScriptManager.GetCurrent(this);
if (sm != null && sm.IsInAsyncPostBack) {
ScriptManager.RegisterClientScriptBlock(
this, typeof(Page), Guid.NewGuid().ToString(),
jq, true);
}
}
PROBLEMA: Il GridView aggiornerà bene durante il postback asincrono (vedere l'evento click sopra); tuttavia, la finestra di dialogo jQuery rifiuta di chiudere (di nuovo, vedere l'evento sopra e dove dice NON FUNZIONA). Sto registrando il javascript (jquery) con ScriptManager nella pagina e quindi dovrebbe essere in esecuzione e chiudere la finestra di dialogo, ma per qualche motivo non lo è.
MODIFICA: Codice che apre la finestra di dialogo jQuery e la rende modale.
può visualizzare un codice jquery? Posso risolvere questo ... – Thulasiram
L'unico jQuery rilevante è incluso nel mio codice sopra (vedere il codice evento del clic). La finestra di dialogo chiusa non funziona per qualche motivo: questo è tutto. – Jagd
Hai provato a eseguire '$ ('# divSuppliers'). Dialog ('close');' in una console JS come Firebug o Developer Console in Safari/Chrome –