【发布时间】:2018-11-02 16:39:35
【问题描述】:
我正在尝试使用 TemplateField 中的 LinkButton 从 Gridview 中删除记录。我的 LinkButton 应该打开一个 bootbox.confirm() 并根据返回值调用后端的 GridView.RowCommand 处理程序。
GridView 布局:
<asp:GridView ID="gvEntRelationship" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="OFTID" DataSourceID="ObjectDataEntRelations" EnableModelValidation="True" >`
<Columns>
<asp:CommandField ShowEditButton="True" />
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="lnkDelRel" runat="server" CausesValidation="False" CommandName="Del" Text="Delete" OnClientClick="return OpenDeleteBox(this);"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Javascript:
function OpenDeleteBox(sender) {
bootbox.confirm("Delete This?", function (confirmed) {
if (confirmed) {
alert('if');
return true;
}
});
alert('outside');
return false;
}
我正在使用 OnClientClick 调用 javascript 函数。在函数内部时,我看到 alert('outside') (暗示它已经返回 false),然后启动箱出现。如果我将 return false 移动到 else 子句中,例如:
bootbox.confirm("Delete This?", function (confirmed) {
if (confirmed) {
alert('in if');
return true;
}
else {
return false;
}
});
它继续使用 GridView.RowCommand 处理程序删除记录,而无需等待确认框甚至出现。
编辑:似乎完成了这项工作
function OpenDeleteBox(sender) {
if ($(sender).attr("confirmed") == "true") { return true; }
bootbox.confirm("Delete This?", function (confirmed) {
if (confirmed) {
$(sender).attr("confirmed", confirmed);
sender.click();
}
});
return false;
}
【问题讨论】:
-
这在Documentation 中有介绍 - Bootstrap(因此 Bootbox)模式是异步的,因此您的 OnClientClick 将在对话框关闭之前解决。
标签: javascript asp.net vb.net aspxgridview bootbox