EXT js中的confirm 为异步方法,格式如下:confirm('标题','提示信息',回调方法).
如果服务器控件还是使用 onClientclick调用javaScript中自带的confirm( 即onClientClick="return Ext.MessageBox.confirm('','',null');" )这种方法是行不通的. 它会没等Ext的confirm执行完成就submit提交服务器了.因为 它返回的是object对象,执行完毕调用"回调方法".
解决办法:
情况一:如果只是调用一般的服务端控件如:asp:Button\LinkButton
可以使用HTML控件,如 HyperLink或Button 它们的onclick事件处理方法. 在处理方法中根据Ext的confirm返回值判断是否调用服务器控件的onclick事件.
如下:
Code
<a href="javascript:confirmSealed('此删除操作不可恢复,您确认删除此维修单吗?','ctl00_ContentPlaceHolder1_LinkButton2');">删除</a>
<asp:LinkButton ID="LinkButton2" runat="server" Width="0px" Height="0px" CssClass ="an_bg" OnClick="LinkButton2_Click" ForeColor="Black" CausesValidation="False">删除</asp:LinkButton>
function confirmSealed(strMSG,strID){
Ext.MessageBox.confirm('提示框',strMSG,onQuery);
function onQuery(btn){
if(btn == 'yes'){
document.getElementById(strID).click();}}
}
情况二:如果服务端控件嵌套在GridView等数据显示控件里面则其ClientID为动态,不能直接指定.需要在GridView的数据绑定事件里进行动态添加.(可也用js在客户端获取)
由超链接执行LinkButton的删除操作,操作之前会进行客户端询问:
以下为前台代码:
Code
<asp:GridView ID="GridView2" runat="server" CssClass="GridViewStyle" Width="4000px" OnRowDataBound="GridView2_RowDataBound" AllowPaging="True" OnPageIndexChanging="GridView2_PageIndexChanging">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<a href='E_OrderDetailShow.aspx?orderid=<%#DataBinder.Eval(Container.DataItem, "订单编号")%>'>详情</a>
</ItemTemplate>
<ItemStyle Width="50px" />
</asp:TemplateField>
<asp:TemplateField>
<ItemStyle Width="50px" />
<ItemTemplate>
<a id="hLinkA" runat="server">删除</a>
<div style=" display:none; width:0px; height:0px;"><asp:LinkButton ID="btnDel" runat="server" OnClick="btnDel_Click">删除</asp:LinkButton>
</div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
后台代码如下:
Code
protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
string name = "";
if (e.Row.RowType == DataControlRowType.DataRow)
{
ClientConfirmBind#region ClientConfirmBind
((HtmlAnchor)e.Row.FindControl("hLinkA")).Attributes.Add("href", "javascript:confirmSealed('确定要删除吗?','" + e.Row.FindControl("btnDel").ClientID + "')");
#endregion
}
}
注意: HTML控件必须设置ID 且需要加runat="server"属性,否则 后台代码找不到该控件.