要求怎么都这么刁难呢!不过还是有办法。
用框架完全可以解决。
制作隐藏的框架,如果进需要保存输入的信息,则在里面设置变量并让他与输入时同步,来保存历史记录即可。
如果要保存整个页面则让该框架也打开对应页面并另输入同步即可。
并且如果你要保存更多的历史记录的话,可以使用iframe并且动态的生成iframe。
该方法可以实现WEB多页面编辑,曾经测试成功过。

解决方案 »

  1.   

    myvicy的方法适合独自开发、页面少的情况用。
    我这里的情况是,当有页面发生了异常会转到指定err页面来,在err页面抓取上一页。
    所以这么做不合适
      

  2.   

    history对象的所有方法和属性都没有返回值 所以通过history来获取是不行的楼主放弃吧
    但可以通过其他方法模拟history
      

  3.   

    上面的方法基本上可以适应你的问题。
    再提供另外一个思路就是把输入的值写入远程的数据库,利用xmlhttp来。
      

  4.   

    to myvicy:
    问题在于事先我不知道哪个页面、何时会发生异常,需要纪录下来,所以有异常可能要抓取整个body的内容。
    其实你的用框架方法是可行的,但不合适的地方在于:
     要随时记录当前页面:刷新、postback、跳转.. 
       浪费:没有发生异常的话,这些纪录的信息就没有用。
       消耗:虽然用js在client执行,但是这些页面是aspx的,暴多的绑定数据+viewstate+server已经令页面上的数据很大啦,而且这个项目有四五百个aspx页面,更何况要我每次抓取整个body..
      

  5.   

    我刚才在想,history对象是怎么访问到那些历史纪录的,还有它们的状态 ?
      

  6.   

    因为你不知道什么时候会发生异常,所以任何的页面都有可能发生,所以要保存任何一个页面的信息,尽管他有45百个。
    history是浏览器保存的。
      

  7.   

    你的要求只能在提交表单这种关键业务中用到。
    既然是提交表单,那么所有的页面信息都可以在提交处理过程中保存在服务器上。
    出错后,把这些信息加以还原。
    history对象封装好的,你没有办法用javascript这些语言去操作,只能使用它提供的几个公开的方法。所以解决办法就是关键业务提交时候保存所有画面的状态到服务器。
      

  8.   

    myvicy的方法,是用iframe时时纪录用户动作,这样要处理body和不少控件的事件。
    fantiny的思路,是在页面post给server时记录页面信息,这样只要在一个事件记录数据就可以了,这段数据我想应该只能放在seesion中了,因为它是不方便作为参数在各层中传递的。
    -- 二位的想法都是先记录,出错了再调出来用。
    意味着性能的一些下降;每个开发人员、每个页面都要写一些处理代码最初我的想法是在出错后还原现场,不过看来大家也认为不可能。
    怎么js就不能返回个上一页的DOM什么的回来呢:(
      

  9.   

    ajax中可以实现后退的方案.
    也就是保存了历史.解决了后退失效的功能.你可以尝试使用ajax,来解决你的保存历史的问题.
      

  10.   

    因为你这些数据都是有用的数据,所以提交后本来就会传递给服务器加以处理。
    如果正常处理的情况,没有必要保存在session里,只有错误处理的时候才保存。
    这样选择的话,性能的一些下降也是有条件的下降,而且容易控制。 
    可以在页面上面制定一个通用错误模块,这样编码也方便。
      

  11.   

    页面是可以定制模块或继承父类的方法,让大家编码方便些,好主意
    但是错误处理,可能是在逻辑层或数据层触发的了,那个时候再获取页面的html会很困难的吧,
     这样的话就只好每次提交都保存数据了,难做到发生异常时才获取和保存的
      

  12.   

    每次提交都保存数据,如果正常的流程,保存的数据清空,异常则根据数据重新输入html页面。
    当你request过来的时候,实际上已经服务器端已经接受到了所有的数据,所以并不会带来多少的性能影响。
      

  13.   

    我刚刚入门,我觉得楼主的问题可以用 Cookie来解决,我以前专作网页的,Cookie可以实现你的功能,需要写一个类来把当前页的resquest中的Form和Queststring甚至Cookie,写入专用的Cookie,这样就可以实现。
    比如reponse.cookie("error")("form_username"),reponse.cookie("error")("cookie_username"),reponse.cookie("error")("queststring_username"),然后在err页调用。
    开销大,最好是每页都能先清除cookie("error"),然后重写。仅供参考,不好了也勿骂,在这里我看了不少的帖子,骂人的多,提建议的少。
      

  14.   

    我是根据这一句来理解楼主意思的,希望可以帮到你。 LifeForCode(用生命编程.重生(2006)) ( ) 信誉:100    Blog  2006-10-25 13:39:56  得分: 0  
        
    myvicy的方法适合独自开发、页面少的情况用。
    我这里的情况是,当有页面发生了异常会转到指定err页面来,在err页面抓取上一页。
    所以这么做不合适  
     
      

  15.   

    只是想像不知道可不可能在err页面中用一个隐藏iframe并且导航到前一个页面,
    然后再获取iframe的document内容
      

  16.   

    to fantiny:
      可取,在server端上尝试呢,不过又遇到其他问题,跟asp.net的机制有有些冲突,不过不属于这个话题啦。to beyond923:
      其实你的思路跟myvicy差不多,先在客户端存下来,只是你用cookie,myvicy用frame控制和保存,其他的地方要实现起来差不多。
       欢迎大家来讨论,可以争论,绝不会有谁骂人di。:)to lkh42002:
       我最初也有这种想法,但是js里,只有"本页"后退才能获取上一页,自己的历史纪录只有自己能用。
       如gzdiablo所说,history对象的所有方法和属性都没有返回值 
       要是能这么写 self.top.iframe[0].window = self.history.back(1)就好啦,
    才不会搞得现在这么头疼
      

  17.   

    技术不是问题。问题是你准备以怎样的方案来解决问题。
    单就你这个问题来讲,你的程序应该有异常处理吧,可以在异常处理的地方把当前的信息记录下来,然后写到日志或者数据库当中。例如当前页面的URL,可以在onload时把location赋值给一个hidden的field.用户输入的信息就更好得到了。
      

  18.   

    to kaukiyou
    是打算在异常处理时记录信息,
    因为不知道用户做了什么操作导致的异常,
    所以试图获取整个页面的html 。
    就引起这个麻烦问题出来啦
      

  19.   

    知道了URL和用户输入的数据不行吗? 想完全记录用户的行为或者获取页面的某个状态很难吧。
    不过我才看了几天的asp,也许那个viewstate可以利用一下。
      

  20.   

    viewstate那个东西呀,我是没本事把它还原,要反序列化递归得到很多Pair的;就算还原了,估计看那些哈希码也不知道是哪个控件...
      

  21.   

    我以前做的也是用一个frame不断监视主frame,判断一些关键字发现异常了记录,虽然性能不好,但是事先不监视,出错了想重放现场就很难了。希望lz找到方法共享出来
      

  22.   

    大概看了看lz的要求,不明白为什么一定要抓图?
    如果你仅仅是需要在页面出错的时候希望保存出错信息的话,为什么不直接保存exception的内容?那个stacktrace已经足够你分析问题了吧?配合上httpcontext,估计分析错误所需要的资料就足够了
      

  23.   

    晕,原来是js版,还以为是asp.net版
      

  24.   

    上次已经说了思路了。用frame记录history肯定可以实现的,思路见:
    http://community.csdn.net/Expert/topic/5059/5059795.xml?temp=.405224代码现在不方便透露, sorry:D
      

  25.   

    用frame记录history肯定可以实现的,思路见:
    http://community.csdn.net/Expert/topic/5059/5059795.xml?temp=.405224代码现在不方便透露, sorry:D:::::::::::::::::
    open..
    UP
      

  26.   

    恩,看了BlueDestiny的思路,很有感触ing....
      

  27.   

    感谢大家的讨论和建议,提供了很多不同的解决思路。
    目前临时用了这种方案:
        在通知用户的前提下,由另一个frame控制主页面后退,获取html,用ajax传给server。
    不过页面还是后退了,嘿嘿,有其他任务,暂用此方法。
    有几位的方法很不错,我好好研究下。先揭帖了,有问题再讨论