2013-08-02 52 views
0

我有一个更新面板内的gridview与GridView的第一列中的复选框。当我第一次创建它时,它运行良好。该复选框被设置为AutoPostBack,并导致异步回发,我可以在其中处理数据并刷新gridview,而不会影响页面的其余部分。防止从gridview与javascript异步回发

但是,我需要测试的页面,客户端在一定条件下,并显示一个确认框,用户,说“这个人是不是就此成立。你确定你要继续吗?'

我这样做,最初,通过在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确认中选择Okay,则会发生异步回发。

正如我说的,此刻,我能得到它的工作的唯一方法是做一个全面的回传用户点击后好。

回答

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> 
1

驻军尼利提供的方法应该是工作您。

回发和异步回发之间的区别是异步只需修改形式的一些值之前提交,使他们以后回来。这些值指示该控制发起与是什么样的信息,也用于其中的iframe应的响应HTML被渲染成一些对象信息的请求。我只是在这里提出一些我的想法,实现在不同情况下会有所不同。