各位好,现在小弟遇到一个问题,在Asp.net中运行一个函数,
运行到一半时需要跟客户端进行交互,
即是询问用户是否要继续执行,如果是就继续,否则就跳出。
小弟的想法是这样来的:
搞一个隐藏控件在源里,初始值为false,
用于客户端和服务器端传值。
在运行服务端的函数时,弹出一个JS的confirm框,
如果用户确定就把隐藏控件的值赋为true,否则为false。
然后根据隐藏控件的值去判断是否继续执行和退出。
思想就是这样子了,但问题来了
调试跟踪的时候发现:在运行完弹出confirm框这一行时,
页面的confirm框还没有出来,
但是程序继续执行,并且根据隐藏控件的初始值进行判断,
结果程序就继续执行,直至这个函数运行完后,
才出现confirm框,等点击完确定后,隐藏控件的值才被改变,
而这个时候服务端的函数已经运行完了,
根本就做不到根据用户的判断来进行是否继续执行。
请问各位大虾,我应该怎么来才能实现根据用户的操作
来选择是否继续执行程序呢?

解决方案 »

  1.   

    在按钮上加
    if(confirm("确认继续"))
    return true
    else
    return false
      

  2.   


    或者你弹出一个页面,然后用session保持用户选择的结果!
      

  3.   

    这个东西我把他叫做异步窗口就是从服务端给浏览器端强行弹出个窗口同时等待浏览器端的窗口返回一个结果之后,服务器端程序继续执行也就是说,在弹出窗口的时候,服务器端的代码是中断运行的,待浏览器的新窗口关闭后,服务器端代码才继续执行你说的对话框,其实用一个弹出窗口更合适更通用然后窗口中可以包含指定的页面,来完成特定的工作,而不仅仅只要个yes or no也可以传参,返回参数,窗口关闭倒计时,等。。不知道你想要的是不是这样的效果
      

  4.   

    明白你的意思,把"程序运行到一半",这部分放到页面加载时搞定,能明白啵?
    页面加载完毕就把"一半"的程序执行完,把结果输出到页面某控件里,如hidden控件里,
    在扭钮事件里直接取hidden控件里的值弹出confirm,询问是否继续,如果不继续return false,否则继续执行,
    在得到confirm的返回值后,如真或假,用JS把返回值放到HIDDEN控件里,后台CS文件读取该值以判断用户当时的选择,
    如confirm用户选择了是,则document.getElementById("某hidden").value = 1否则写0,
    后台CS文件里取
    某hidden.value == "1" ?do something : do another thing;
      

  5.   

    呵谢谢bingdian37的回答,确实是要这样的效果,只不过小弟不知那种情况就叫做“异步窗口”,现在是明白了,可是怎样来实现呢?还有,我的结贴率这么小是因为只问过四个问题,而且都是关于WebPart的。所以结贴比较少哈哈。。只要有满意的答案我还是给分的嘻不要介意啊。还有,你在八楼哎了一下。。什么意思呢?
    等会再结贴啊。
      

  6.   

    楼主这次结贴也太快了,名字是我自己起得,所以不知道很正常,可能叫异步不合适,应该叫同步窗口才是,叫异步是因为使用了xmlhttprequest实现方法大体描述下不方便给你直接出源代码,请理解第一.服务端要调用某个东西去弹出窗口,我们把这个类独立出来,称为异步窗口类
    这个类要完成的任务就是:向客户端发送一段脚本,并且强制服务端立即输出,然后开始断断续续的sleep,并检测时候有结果返回(如何检测下面会说)
    该脚本将完成弹出窗口,将参数传递到弹出窗口,并等待弹出窗口关闭,接收返回结果
    并将结果传递给服务端的任务关键点在与如何将结果传递给服务端,这里就需要使用xmlhttprequest对象了,将结果提交到服务器
    这个时候服务器正在断断续续的sleep,如何让服务器直到这个结果呢?这里就要通过HttpModule了,在服务端由一个HttpModule去接收结果,并保存到application级别的一个哈希表中,服务端检测是否有结果返回的时候就是通过这个地方去查询当然,为了能够确定一个准确的结果(不至于在多个用户弹出多个窗口时候混淆),你自己要去唯一的标识一个弹出窗口,并在提交结果的时候同时提交该标识当然,服务端应该有超市机制,过了多长时间,没有应答的话,就有个默认的动作去继续另外客户端浏览器那个弹出窗口,应该用模态窗口比较合适,但是不能让他一直在那里,可以再加上一个倒计时基本思路就是如此希望对你有所帮助
      

  7.   

    嗯,bingdian37你说的思路我基本理清了,也知道大概怎样去实现。等会就去试一下谢谢赐教!结贴快是因为有满意的答案嘛。。哈哈