我在更新面板中有一个 gridview,在 gridview 的第一列中有一个复选框。当我第一次创建它时,它运行良好。该复选框设置为 AutoPostBack 并导致异步回发,我可以在其中处理数据并刷新 gridview 而不会影响页面的其余部分。
但是,我需要在客户端页面上测试某个条件,并向用户显示一个确认框,上面写着“此人不是为此设置的。你确定你要继续吗?'
最初,我是通过在 gridview 的 RowDataBound 事件中添加一些这样的代码来做到这一点的;
CheckBox cb = (CheckBox)e.Row.FindControl("myCheckBox");
cb.Attributes.Add("onclick", "return check('" + ContactName + "');");
并具有以下方面的javascript函数:
function check(ContactName)
{
if (document.getElementById('Listed') == false)
{
if (confirm('This person is not listed, are you sure you want to continue?'))
{
return true;
}
return false;
}
}
请忽略上面代码中的拼写错误,如果是凭记忆输入的。问题是,它有效。如果我的局部变量 Listed 为 false,它会弹出确认框。
问题是,如果您在确认框中选择“Okay” - 复选框生成的回发(应该是异步的,因为它在 ChildrenAsTriggers = true 的更新面板内)被取消。我必须在 javascript 确认后调用 __doPostback 才能发生回发。但是,然后,我得到了一个完整的回发,而不是我想要的异步回发。
所以,我的问题是,如何防止来自带有 javascript 确认的复选框的异步回发,这样,如果您在 javascript 确认中选择 Okay,就会发生异步回发。
正如我所说,目前,我可以让它工作的唯一方法是在用户单击“确定”后进行完整的回发。