我正在尝试使用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函数。在内部功能时,我看到警报('外部')(暗示它已经返回false),然后出现引导框。如果我将return false移动到else子句中,如:
bootbox.confirm("Delete This?", function (confirmed) {
if (confirmed) {
alert('in if');
return true;
}
else {
return false;
}
});
它继续使用GridView.RowCommand处理程序删除记录,而不等待confirmmbox甚至显示。
编辑:似乎完成了这项工作
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;
}