0

我在更新面板中有一个 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,就会发生异步回发。

正如我所说,目前,我可以让它工作的唯一方法是在用户单击“确定”后进行完整的回发。

4

2 回答 2

1

此位置的链接讨论了如何通过 JavaScript 取消异步回发:

http://www.ajaxtutorials.com/ajax-tutorials/cancel-asynchronous-postback-in-c/

重要的部分在这里:

<script type="text/javascript">
var instance = Sys.WebForms.PageRequestManager.getInstance();
instance.add_initializeRequest(instance_initializeRequest);

function instance_initializeRequest(sender, args) {
    if (args.get_postBackElement().id == 'btn_Cancel') {
        instance.abortPostBack();
        alert('Postback has been cancelled. Time will not be updated.');
    }
}
</script>
于 2013-08-02T15:18:01.207 回答
1

Garrison Neely 提供的方式应该适合您。

回传和异步回传的区别在于异步只是在提交之前修改表单的一些值,然后再将它们设置回来。这些值指示哪个控件使用什么样的信息发起请求,还有一些目标信息用于将响应 html 呈现到哪个 iframe 中。我只是在这里提出一些我的想法,不同情况下的实现会有所不同。

于 2013-08-03T00:49:54.317 回答