使用javascript防止从gridview异步回发



我在更新面板中有一个网格视图,网格视图的第一列有一个复选框。当我第一次创建它时,它运行良好。复选框设置为AutoPostBack,并导致异步回发,在那里我可以处理数据并刷新网格视图,而不会影响页面的其余部分。

但是,我需要在页面、客户端测试某个条件,并向用户显示一个确认框,上面写着"此人没有为此设置"。你确定要继续吗?'

最初,我在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,它会抛出确认框。

问题是,如果您在确认框中选择"OK",则复选框生成的Postback(应该是异步的,因为它位于ChildrenAsTriggers=true的更新面板内)将被取消。我必须在javascript确认后调用__doPostback才能进行Postback。但是,我得到的是完全回发,而不是我想要的异步回发。

所以,我的问题是,如何防止带有javascript确认的复选框进行异步回发,这样,如果在javascript确认中选择"OK",异步回发就会发生。

正如我所说,目前,我能让它工作的唯一方法是在用户单击"OK"后进行完整的回发。

此位置的链接讨论如何通过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>
Garrison Neely提供的方式应该适合您。

回发和异步回发的区别在于,异步只是在提交之前修改表单的一些值,然后再将其设置回。这些值指示哪个控件用什么类型的信息发起请求,还指示一些目标信息,这些信息用于将响应html呈现为哪个iframe。我只是把我的一些想法带到这里,实现在不同的情况下是不同的。

相关内容

  • 没有找到相关文章

最新更新