Tôi đã có một ASP.NET UpdatePanel với những điều sau:jQuery Dialog 'Đóng' mâu thuẫn với 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>
Khá đơn giản, thực sự. Không có gì nhiều hơn một div mà tôi sử dụng cho jQuery Dialog popup của tôi, một ASP.NET GridView kiểm soát với một cột duy nhất, và một nút ASP.NET cho postbacks không đồng bộ.
Đây là sự kiện nhấp chuột xử lý postback không đồng bộ cho 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);
}
}
VẤN ĐỀ: Các GridView sẽ cập nhật tốt trong postback không đồng bộ (xem sự kiện click trên); tuy nhiên, Hộp thoại jQuery từ chối đóng lại (một lần nữa, xem sự kiện ở trên và nơi nó nói KHÔNG LÀM VIỆC). Tôi đang đăng ký javascript (jquery) với ScriptManager trên trang và vì vậy nó sẽ được thực hiện và đóng hộp thoại, nhưng vì một lý do nào đó nó không.
EDIT: Mã mở hộp thoại jQuery và thực hiện phương thức.
protected void btnAddSupplier_Click(object sender, EventArgs e) {
lstSuppliers.ClearSelection();
lstSuppliers.DataSource = Suppliers.GetAllSuppliers();
lstSuppliers.DataBind();
string jq = "var dlg = $('#divSuppliers').dialog({ modal: true, draggable: true, title: 'Suppliers', width: 500 }); dlg.parent().appendTo($('form:first'));";
ScriptManager sm = ScriptManager.GetCurrent(this);
if (sm != null && sm.IsInAsyncPostBack) {
ScriptManager.RegisterClientScriptBlock(
this, typeof(Page), Guid.NewGuid().ToString(),
jq, true);
}
}
u có thể hiển thị mã rquy không? tôi có thể giải quyết được điều này ... – Thulasiram
jQuery chỉ có liên quan được bao gồm trong mã của tôi ở trên (xem mã sự kiện nhấp chuột). Hộp thoại đóng không hoạt động vì lý do nào đó - đó là tất cả. – Jagd
Bạn đã thử thực hiện hộp thoại '$ ('# divSuppliers'). ('Close');' trong bảng điều khiển JS như Firebug hoặc Developer Console trong Safari/Chrome –