繁体   English   中英

使用JavaScript防止从GridView进行异步回发

[英]Prevent an asynchronous postback from gridview with javascript

我在更新面板中有一个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,则抛出确认框。

问题是,如果在确认框中选择“确定”,则取消了由复选框生成的回发(它应该是异步的,因为它位于带有ChildrenAsTriggers = true的更新面板中)。 我必须在javascript确认后调用__doPostback才能发生Postback。 但是,然后,我得到了完整的回发,而不是我想要的异步回发。

因此,我的问题是,如何通过带有JavaScript确认的复选框阻止异步回发,因此,如果在javascript确认中选择“确定”,则会发生异步回发。

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

此位置上的链接讨论了如何通过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>

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

回发和异步回发之间的区别是异步只是在提交之前修改form的某些值,然后在提交后将其设置回去。 这些值指示哪个控件以什么样的信息来发起请求,还提供用于将响应HTML呈现到哪个iframe的一些目标信息。 我只是在这里提出一些想法,在不同情况下,实现方式会有所不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM