模态窗口的读缓存问题

本文分享了在ASP.NET中使用JavaScript实现模态窗口的心得,包括解决缓存问题、参数传递及关闭页面等关键技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


自己是用      Response.Expires = -1;解决的!

今天用Asp.net写了个OA系统,感觉写起来,真麻烦,尤其是要不断地弹出新增、修改的窗口,感觉每次敲代码是一种痛苦。所以,稍稍总结了一下,将模块窗口的弹出丢在了一个公共类(Function)的方法里面进行处理(其实早就该这么做)。
      eg:
      public string ModalWindow(string openAspxPage,int width,int height)
      {
               string js = string.Format("javascript:window.showModalDialog(/"{0}/",window,/"status:false;dialogWidth:{1}px;dialogHeight:{2}px/")",openAspxPage,width,height);
              return js;
      }

      本来想用StringBuilder来写的,可是StringBuilder写起来实在麻烦,干脆就换了string,反正影响不大。
       另外,又写了一个关闭页面的方法,写得粗糙一些,将就着用吧
      public string ClosePage()
      {
             StringBuilder js = new StringBuilder();
             js.Append("<script language=/"JavaScript/">");
             js.Append("window.close();");
             js.Append("</script>");
             return js.ToString();
      }


       项目中,除了添加、修改的页面是Aspx,其它的都是ascx。
       感觉上,就是openApxPage的大小不太好控制,而且上面写的代码并不适合于DataGrid控件中的LinkButton控件,所以又得再写一个方法重载了。

      使用模态窗口时,还得注意三个问题:
      1、要弹出的页面中,一定要保证<head></head>标签间有<base target=“_self”>,否则会弹出的模态窗口上,点击按钮时,会再次弹出一个新页面。
      2、被弹出页面的按钮的事件处理中,应该有Response.Write(new Function().ClosePage());语句,用以关闭当前的模态窗口。
      3、因为幽默的缓存原因,如果你在模态窗口中修改了数据,你会发现,父页面上的数据刷新了,但是当你再点击按钮,重新弹出模态窗口时,你会发现模态窗口中的内容还是上次的内容,经过我试验,手动改了html代码后,点击弹出的模态窗口还是弹出相同的页面,所以,这里要绕开这个机制,方法是在被弹出的aspx页面后加上随机参数。上面模态窗口代码可以改成如下,以避免此问题:

      public string ModalWindow(string openAspxPage,int width,int height)
      {
               string js = string.Format("javascript:window.showModalDialog(/"{0}&rand="+new Random().Next().ToString()+ "/",window,/"status:false;dialogWidth:{1}px;dialogHeight:{2}px/")",openAspxPage,width,height);
              return js;
      }
   
      注意红字部分参数,是自定义的一个参数,此参数应该是整个项目中唯一的变更名称,并且无意义(最保险的办法是把这个变更命名为lakjsdflawdfqwoifa之类的名称)。
      基本上,满足了上述条件,做页面时就操作模态窗口,相对就简单了。
      如果还想做得简单一些,可以把
ModalWindow 方法写得更完善一些,因为时间较紧,所以这里的东西比较粗糙。有空时,把它改一下,并完善一下Function类的内容,增加一些常用的JavaScript的代码,让它成为可配置的数据。
     对了,有空时应该把什么“有声有色“之类的软件里自带的JavaScript代码改动一下,重新做一个专门的JavaScript特效.net类库,到时好用。

posted on 2004-06-22 04:06 寒枫天伤 阅读(3111) 评论(16)   编辑  收藏
href="http://www.cnblogs.com/william_fire/Services/Pingback.aspx" rel="pingback" /> 评论:
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    飞叶 Posted @ 2004-06-22 07:58
    关于第三点
    是因为浏览器缓存的缘故
    你的方法固然是一个解决办法
    但是有更简单的
    加上
    Response.Expires = -1
    就可以了   
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    dudu Posted @ 2004-06-22 08:02
    好文章。
    谢谢!正被模态窗口的缓存问题困扰。   
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    associate Posted @ 2004-06-22 11:04
    我也是正在做这方面的事情.来得巧.
    现在遇到的问题是如何在弹出页面关闭后,触发父窗体上的控件的事件.
    例如:
    弹出人员选择框,用户选择人员返回后,事件触发更新页面上关于此人员的信息.
    因为JS是客户端事件,怎么去触发aspx中的服务器端控件的事件啊?
      
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    寒枫天伤 Posted @ 2004-06-22 23:45
    To Associate:
    如果要利用js触发服务器控件的事件,要通过指定postback来完成。   
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    寒枫天伤 Posted @ 2004-06-22 23:50
    To 飞叶:
    如果使用Response.Expires = -1 ,有一个问题就是不方便于方法的封装,因为这要求在被弹出的窗体中加入此一语句。
    所以,这里采用的是加入一个随机参数的方法。
    当然,如果我说的有什么不妥之处,您也可以指出   
  • #  请教:如何获取模态窗口的传递参数?
    vita Posted @ 2004-07-16 17:38
    如何让服务器后台能够读取到打开模态窗口时传入参数?   
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    Rover Posted @ 2004-07-16 21:45
    如何让服务器后台能够读取到打开模态窗口时传入参数?

    用hidden,把参数赋给hidden   
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    大漠孤烟 Posted @ 2004-12-24 15:50
    好就一个字,妙   
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    coolstone Posted @ 2005-03-03 10:21
    把ie设置成"每次访问此页时检查"即可。   
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    syx Posted @ 2005-04-01 16:44
    good   
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    leo Posted @ 2005-04-10 05:10
    少了点东西!
    能不能提供一下传递值的方法!   
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    ss Posted @ 2005-04-15 15:58
    写一个适合于DataGrid控件中的LinkButton控件的方法重载吧.   
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    souhouka Posted @ 2005-05-10 16:19
    关闭页面时会弹出一个对话框,怎么让对话框不出现呢   
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    苏旭升 Posted @ 2005-05-11 15:12
    将模块窗口的弹出丢在了一个公共类(Function)的方法里面进行处理(其实早就该这么做)。

    这样的话如果我调用弹出窗口时父页面回有post这样造成用户使用感受不好, 有没有能够在客户端直接使用 ,有很方便复用的呢??   
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    leo Posted @ 2005-05-14 17:25
    好文章,但是怎么在关闭子窗口的时候刷新父窗口数据?   
  • #  re: Asp.net中使用javascrip的模态窗体的一点体会。
    寒枫天伤 Posted @ 2005-05-16 22:59
    To Leo
    在弹出后,在父页面中刷新一遍,如下:
    弹出窗口
    刷新页面

    注:因为弹出窗口时,线程是被阻塞的,刷新页面会等到弹出窗口关闭后才执行。 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值