• 今天被window.showModalDialog搞得郁闷~~


          今天继续在搞我的Web编辑器,已经是第三天了,今天的任务是把上传文件的功能实现。
    我一开始的思路是:点击图形按钮,JS调用window.showModalDialog方法,在其页面上传文件后,
    获取文件名和和上传文件的页面地址,返回给调用页面。好,思路有了,就开始作手实现,
    这个时候应该是凌晨3:00左右。

          一开始很顺利,JS调试正常,上传文件的代码也封装好了,直接调就行了。
    点击上传文件图形按钮,页面弹出,好了可以上传文件了……     
     的确,文件是上传了,但出现了个小问题,就是单击上传的时候会弹出一个新的窗口来处理,
    这在意料之外,但又是绝对不能允许的,因为如果用window.showModalDialog调用页面的话,
    只能在这个调用的页面里处理数据才能够将处理的结果返回,否则就无法返回数据,
    所以那个窗口不能弹出来!绝对不能!凸(-_-)凸。

          先来分析下为什么会弹出新的窗口,因为我在页面上单击了一个Button控件,
    这个控件是runat=server的,所以要PostBack一次,如果是普通的页面的话,
    PostBack表面上看来就是刷新一下页面,用window.showModalDialog调用的页面是一个对话框,
    也就是说不具有刷新的方法,那当它被PostBack之后会怎么办呢,很简单,就是open一个页面,
    这个页面就是单击Button之后数据处理完的页面,而以前的页面,
    就是那个对话框还原原本本地呆在那里,没处理一点东东-_-!...这样的话,
    我就无法得到我想要它返回的数据了,该方案宣布失败~~~(T_T)。。。
    算了,既然这样行不通,那就只有另想它法了。

          第二套方案:我再建个页面,用对话框来调这个页面来处理数据,处理完毕后,
    再通过网页表单的GET方式传递数据到对话框,然后再通过对话框来返回我需要的数据,,,,
    呼~~~这样子总该可以了吧~。。。测试,对话框调用新页面成功,好,在新页面内处理数据,
    处理完毕后再传递给对话框……汗,这里又出问题!又是新弹出网页窗口,
    无法替换对话框中的页面,对我的Response.Redirect()视而不见,
    完全按照JS的window.open()来处理,我倒~~~再一次失败~!!

          不要恢心,再来!思索一阵又得出个第三套方案:还是三个页面:调用对话框的页面,
    对话框页面,处理数据页面。这次这样做:先调出处理数据页面,先把数据处理了,
    把值传给对话框,然后……然后……然后就错了!这样就得不到对话框的返回值了,
    我调反了,,,失败Again~~~

          没关系,失败是成功的儿子的爷爷的孙子的奶奶嘛,再来,我今天就不信了,
    这个功能我就不能实现?!第四套方案:不用window.showModalDialog来处理,
    直接open弹出新窗口,最后的返回值用表单的GET方式传递给主调用页面。
    But.....主调用页面是一个客户端处理页面,全用JS控制,如果GET方式传参数的话,
    页面将刷新,那就达不到我的目的了~~~~~~~T_T

          "我"该怎么办(注意:打""号的字要重读,后同)?我"该"怎么办?我该"怎"么办?
    我该怎"么"办?我该怎么"办"?...偶很想不这样做功能了,
    干脆直接叫用户自己在弹出的新窗口中复制上传后的文件地址,自己粘贴到编辑区算了。
    8过这个念头在偶脑中闪了0.4264秒之后就被果断地否觉了,这样做太不人性化了,
    用户体验可谓说极差,,,
    所以,必须继续搞下去,已经做到这个时候了我总不能放弃嘛,,天~~

     第五套方案:用<a target="_self" href="页面地址" >来实现跳转,嘿嘿,我就不信我治不了你~~。。
    代码写好,调试,点超链接,一个新的窗口又神奇地弹了出来,,
    天!!我明明用的"_self",是自身框架啊~~~无语。。。。

          就在这个时候,由于想到了"框架"这个强悍的东东,思路就又换了一下,
    我何不用框架呢,嵌入对话框中直接调用。好的,试试先……

          第六套方案:在对话框页面中嵌入一个<iframe>,页面就是处理上传的页面,
    不过要在<head>里面加一个<base target="_parent">,嘿嘿,这样的话,就可以跳转到父页面了,
    理论上是没有什么问题的了。好,作手试验先~~单击上传文件的图形按钮,弹出对话框,
    因为嵌入了上传的页面,直接上传就行了。选择本地文件,点击上传……
    啊`!!!终于成功了~!!数据终于是返回了回来,555555,,,
    …………现在已经是上午9:00了~~~-_-!
          最后实现的过程就是这样的:主调用页面调用对话框,
    对话框页包括文件地址和文件名这两个<input type="text">,
    用户可以手动输入文件网页地址和文件名,确实后会返回其数据。
    当然,也可以通过上传方式得到数据,上传的页面就是嵌入在对话框中的<iframe>,
    它保存文件到服务器后,就会返回文件信息给对话框页面,
    自动填充文件名和文件地址,用户确定后就会直接插入上传的文件到编辑中光标所在位置了,,,
    就是这么简单的一个功能,我却从3:00搞到了9:00,God!
    这个效率太恐怖了~~~幸好最后还是搞出来了,不然这次就惨了~!

          今天晚上还要接着通宵,争取能把web编辑器做完,
    嘿嘿V1.0的功能不是很强大,凑合着用在毕业设计的后台里面,
    等毕业设计完了再继续升级~~
  • 相关阅读:
    专有宿主机如何实现“资源池”管理——集群管理能力升级
    像Google一样构建机器学习系统3
    利用阿里云容器服务打通TensorFlow持续训练链路
    阿里云积极落实等级保护制度,政务云全国首个通过等保2.0合规评测
    Facebook F8|闲鱼高级技术专家参会分享
    UI2CODE智能生成代码——组件识别篇
    基于TableStore的海量气象格点数据解决方案实战
    药品监管系统架构揭秘:海量溯源数据存储与查询
    对比MySQL,一文看透HBase的能力及使用场景
    bzoj1003 [ZJOI2006]物流运输
  • 原文地址:https://www.cnblogs.com/Random/p/730408.html
Copyright © 2020-2023  润新知