随心所欲
做个幸福的人
posts - 147, comments - 1402, trackbacks - 28, articles - 0
博客园
::
首页
::
新随笔
:: ::
订阅
::
管理
Atlas:在UpdatePanel里面上传附件
Posted on 2006-07-11 09:33
随心所欲
阅读(5899)
评论(34)
编辑
收藏
网摘
所属分类:
AJAX : Atlas
上次说到(
和Atlas专家探讨Atlas的一些Bug和疑问
),在Atlas里面使用FileUpload上传附件有困难:UpdatePanel每次回发的只是一个XmlHttp的请求和ViewState,并没有回发整个页面,所以,在server端无法获得FileUpload的文件。
首先想到的解决方法就是不使用UpdatePanel:弹出一个新窗口,上传文件。新窗口里面不使用UpdatePanel。 这个方法当然可以。
今天忽然想起来,GMail里面的附件上传:后台上传文件,还不影响你前边邮件的编辑,也不整体页面刷新。这个模式够帅!不用打开新窗口,一个页面搞定,页面也不用刷新。
对比了一下,好象第二种方法更好一点。于是FireBug(
AJAX程序的跟踪工具:fireBug0.4
)了一下GMail,发现了里面的处理是这样的
<
iframe
scrolling
="auto"
frameborder
="0"
onload
="try{if(top.js.init)top.js._IF_OnLoaded('v1')
<
input
type
="file"
onchange
="top.js._CM_OnAttach(window,this)"
name
="f_ephki04a"
size
="50"
/>
他的上传附件是放在一个
iframe
里面的,然后控件的onchange事件里面有些处理。
果然是个不错的方法。
于是我做了这样的处理方案:
1:主页面中使用UpdatePanel,然后UpdatePanel里面放置的不是FileUpload控件,而是一个Iframe
2:这个iframe在链接一个新的页面,那个页面里面有FileUpload控件。
3:上传完毕后,告诉主页面上传得结果
先看一个直接使用FileUpload的例子:这个例子里面,服务端是无法找到上传文件的。
<
atlas:UpdatePanel
ID
="up1"
Mode
="Conditional"
runat
="server"
>
<
ContentTemplate
>
<
asp:FileUpload
ID
="FileUpload1"
runat
="server"
/>
<
asp:Button
ID
="Button1"
runat
="server"
Text
="Button"
OnClick
="Button1_Click"
/>
</
ContentTemplate
>
</
atlas:UpdatePanel
>
看看,我们该如何实现
1:新建主页面Default.aspx
在适当的位置,放置一个上传附件的UpdatePanel区域
<
atlas:UpdatePanel
ID
="up_attachment"
Mode
="Conditional"
runat
="server"
>
<
ContentTemplate
>
<
iframe
id
="file"
name
="file"
src
="attachment.aspx"
></
iframe
>
</
ContentTemplate
>
</
atlas:UpdatePanel
>
2:新建上传文件的页面
attachment.aspx
,然后放上FileUpload控件
<
div
>
<
asp:FileUpload
ID
="FileUpload1"
runat
="server"
/>
<
asp:Button
ID
="Button1"
runat
="server"
Text
="OK"
OnClick
="Button1_Click"
/>
</
div
>
3:在
attachment.aspx
里面,上传文件之后调用主页面的js,报告上传情况。这是函数原型:
<
script
>
window.top.callBack(fileName);
</
script
>
4:Default.aspx主页面里面增加这个函数,处理返回值
<
script
>
function callBack(fileName)
{
document.getElementById(
'
Attach1
'
).innerHTML
=
fileName;
}
</
script
>
然后,搞定。
这个方案,虽然还是两个页面,但是看起来处理都在一个页面里面,页面处理无刷新。
Feedback
#1楼
回复
引用
2006-07-11 10:18 by
同舟共济 [未注册用户]
有用
#2楼
回复
引用
查看
2006-07-11 10:28 by
阿不
确实是一个不错的方案。我有看过的无刷新的上传解决方案中也是使用iframe的,比如:AspnetUpload,FCKEditor的上传。我也来试试。
#3楼
[
楼主
]
回复
引用
查看
2006-07-11 10:31 by
随心所欲
@同舟共济
如果有时间,我就把他做成一个控件。
#4楼
[
楼主
]
回复
引用
查看
2006-07-11 10:31 by
随心所欲
@阿不
放心,测试过了,没有问题。
看起来也很帅。
虽然方法曲线了一点,但是结果是好的。
#5楼
回复
引用
2006-07-11 10:35 by
leeight262 [未注册用户]
不放到iframe里面也可以。
<iframe name="a"></iframe>
<form method="post" target="a">
<input type="file" />
</form>
这样子也可以实现无刷新的效果。
在x2blog上面学的
#6楼
回复
引用
查看
2006-07-11 10:37 by
阿不
@leeight262
这样也能放在Atlas的Updatepanel吗?
#7楼
[
楼主
]
回复
引用
查看
2006-07-11 10:41 by
随心所欲
@leeight262
不再两个页面里了。
但是看原理,还是两个文件(两个form)中分别处理。
看起来写法简单。
不过,我还不太习惯在aspx里面放置两个form。
#8楼
[
楼主
]
回复
引用
查看
2006-07-11 10:42 by
随心所欲
@leeight262
应该也是个不错的选择方案,感谢。
#9楼
回复
引用
2006-07-11 10:59 by
閮界潱 [未注册用户]
基本同意
#10楼
回复
引用
查看
2006-07-11 11:30 by
亦续缘
document.getElementById('Attach1').innerHTML=fileName;
找不到ID='Attach1'.能不能说一下,谢谢!或者能不能给出个例子。
#11楼
[
楼主
]
回复
引用
查看
2006-07-11 11:34 by
随心所欲
@亦续缘
这种写法只是一些伪码。
意思是,把返回的值写道你自己需要的地方(就是自己用来显示的控件的ID)
如果你想测试:
你在Default.aspx里面放上一个TextBox,Id='Attach1', 就可以了。
返回的那个函数也得相应的修改成真正的函数。
#12楼
回复
引用
2006-07-14 18:10 by
dddv [未注册用户]
说了这么久你都没有告诉我们哪里有Atlas下载啊。给个下载地址吧
#13楼
[
楼主
]
回复
引用
查看
2006-07-14 20:36 by
随心所欲
@dddv
到他的主页上去找,应该会有的
http://atlas.asp.net/default.aspx?tabid=47
#14楼
回复
引用
2006-07-21 11:43 by
kiven [未注册用户]
不错的一个方法,学习中........
#15楼
回复
引用
2006-07-28 17:11 by
york [未注册用户]
两个form的怎么做?给个地址
#16楼
回复
引用
2006-08-18 11:40 by
snowyon [未注册用户]
我发现一个问题,用楼主的方法,虽然可以成功,但是,我发现当加入iframe时候,主页面,每当我把BUTTON1按下时候,明显页面还是刷新了,感觉UPDATEPANEL没起到作用
#17楼
回复
引用
2006-09-02 09:54 by
ff [未注册用户]
不行,用不起,报错
#18楼
回复
引用
2006-09-02 09:55 by
ff [未注册用户]
这个 filename是从哪里取的值??没写清楚
#19楼
回复
引用
2006-09-18 21:07 by
lovan [未注册用户]
你说的这个问题,是个解决的好方法,但是只不过Default.aspx中iframe外的地方没有更新而已,并不是真正的刷新,同时还有下面一个问题:在Default.aspx里面点OKButton 的事后,浏览器最下面的状态栏还是显示着加载。我发现在magic Ajax里面也有同样的问题。这个似乎与Javascript的本质有点关系吧!期待更好的解决方案!
谢谢啊!
#20楼
[
楼主
]
回复
引用
查看
2006-11-30 17:47 by
随心所欲
@ff
the "fileName" is from the fileUploader at attachment.aspx. this is the param to send back to the pre page
#21楼
回复
引用
查看
2007-01-05 08:19 by
yunhuasheng
@leeight262
这个也是一个方法.
#22楼
回复
引用
查看
2007-01-05 08:20 by
yunhuasheng
写的不错!
#23楼
回复
引用
2007-02-06 10:04 by
ee [未注册用户]
最好能在提供一个上传的进度条就好了
#24楼
[
楼主
]
回复
引用
查看
2007-02-06 12:35 by
随心所欲
@ee
计算进度有点困难....
#25楼
回复
引用
查看
2007-03-26 11:10 by
Edwin dong
现在正在找这个东西呢,博主简直是帮我了一个大忙了,谢谢
#26楼
[
楼主
]
回复
引用
查看
2007-03-26 11:41 by
随心所欲
@Edwin dong
喜欢就好。
#27楼
[
楼主
]
回复
引用
查看
2007-03-26 11:43 by
随心所欲
@ee
找到了一个方法,过段时间写出来
#28楼
回复
引用
2007-03-27 09:35 by
coffeefox [未注册用户]
刚开始研究这个东西
说的好模糊啊
怎么也搞不定……
#29楼
[
楼主
]
回复
引用
查看
2007-03-27 14:53 by
随心所欲
@coffeefox
这里的介绍已经比较详细了。动手试试。
#30楼
回复
引用
查看
2007-03-28 16:20 by
野猪&翔帅
学习
#31楼
回复
引用
2007-04-03 17:57 by
事实 [未注册用户]
filename那来的?写清楚啊,菜鸟看不懂
#32楼
[
楼主
]
回复
引用
查看
2007-04-04 23:03 by
随心所欲
@事实
attachment.aspx里面的那个上传按钮在触发时,得到上传文件的名字。
#33楼
回复
引用
2007-08-13 20:21 by
yymycabbage [未注册用户]
在default.aspx 页面上按 提交按钮 后,通过调用 attachment.aspx页面上的form.submit()来提交页面,却怎么也获得不了文件,
但是在attachment.aspx页面上直接按按钮提交却成功获得文件,
请问问题会是出在哪边呢?
以前好像成功过,现在死活不行了,郁闷!
#34楼
回复
引用
查看
2008-10-20 21:41 by
cloudgamer
可以参考一下这个无刷新文件上传系统
http://www.cnblogs.com/cloudgamer/archive/2008/10/20/1314766.html
新用户注册
刷新评论列表
标题
姓名
主页
Email
(博主才能看到)
验证码
*
看不清,换一张
[
登录
][
注册
]
内容(请不要发表任何与政治相关的内容)
网站首页
新闻频道
社区
小组
博问
网摘
人才
找找看
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2006-07-12 11:04 编辑过
Google站内搜索
China-pub 计算机图书网上专卖店!6.5万品种 2-8折!
近千种 9-95 新二手计算图书火热销售中!
开发者征途系统新作:《设计模式——基于C#的工程化实现及扩展》
相关文章:
相关链接:
所属分类的其他文章:
for AJAX,现在有新的方法来实现 this.RegisterStartupScript 函数么?
在web页上划出动态变化的曲线。
Atlas:在UpdatePanel里面上传附件
和Atlas专家探讨Atlas的一些Bug和疑问
VirtualEarth的一个例子程序
使用VirtualEarth开发地图程序
在微软的第一个ShowCase:Atlas
Atals新发现的bug
参加了一个IE7的测试
AJAX程序的跟踪工具:fireBug0.4
最新IT新闻:
51.com否认彩虹软件改名
彩虹QQ正式更名51彩虹 称“上QQ从51彩虹开始”
Jadu: 将 PHP 编译成 .NET
开心网遭多个山寨版复制围抢用户
微软表示Windows 7将直接在CPU上跑DirectX 10
Powered by:
博客园
Copyright © 随心所欲
日历
<
2006年7月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
公告
版权声明:
1:所有文章(随笔)都欢迎用于免费技术推广,但请保留作者署名权。
2:所有文章(随笔)都禁止任何形式的商业盈利性活动,除非获得作者书面同意。
ps:这里不附带任何完整源代码下载,仅提供思路和方法。
ps:由于暂时无法登录MSN等,如果需要交流请留下邮箱地址。
与我互动
给我发短消息
搜索
常用链接
我的随笔
我的空间
我的短信
我的评论
更多链接
我的参与
我的新闻
最新评论
我的标签
留言簿
(42)
给我留言
查看私人留言
我参加的小组
ASP.NET
设计模式
.NETCompactFramework
SaaS
我参与的团队
ASP.NET AJAX (Atlas)学习(0/1358)
.NetFramework3.0 & 3.5(WCF,WPF,WF)团队(0/619)
报表与图表团队(0/182)
随笔分类
(172)
AJAX : Atlas(14)
Asp.net2.0 (20)
MS Office(4)
ORM/DB(9)
RDLC报表(3)
VB6(2)
VS2005(11)
Workflow(8)
对象序列化(6)
盲人摸象(19)
其他技术(38)
其他控件(5)
通讯/WebServer(25)
中小型企业应用(3)
做个幸福的人(5)
收藏夹
(16)
atlas(3)
others(6)
webbrowser(1)
程序域(2)
设计模式(1)
运行效率方面(3)
Friends
Ding Sea @ SG
唐唐的钻石小店
钻石恒久远。
特价机票
最新评论
1. re: Red Five Labs Net60 v2.0 发布了(支持.net在Symbian上的开发 )
@kiler 俺的手机是Nokia的,所以对这个还是比较关注的。 Java不会,C++不通,只有拿.NET上了。 自己写个小游戏放在自己的手机里打,不是一般的爽.........
--随心所欲
2. re: Red Five Labs Net60 v2.0 发布了(支持.net在Symbian上的开发 )
@随心所欲
呵呵,偶的wm开发主要是自娱自乐,不是商业行为,所以无视。
--kiler
3. re: Red Five Labs Net60 v2.0 发布了(支持.net在Symbian上的开发 )
@M600i
S60第三版及其以上
--随心所欲
4. re: Red Five Labs Net60 v2.0 发布了(支持.net在Symbian上的开发 )
S60 UIQ
都支持么?
--M600i
5. re: ZedGraph在Asp.net中的应用
@pl_1069
应该可以。
因为我在.net2.0 beta的时候就用过,所以那时候肯定有支持1.1的
--随心所欲
阅读排行榜
1. WebBrowser控件的简单应用2(16564)
2. 微软推出的工作流引擎:Windows Workflow Foudation(13130)
3. 扬长避短,适度使用ORM.(11371)
4. C#的Socket程序(TCP)(10453)
5. 关于单点登陆的一些问题(8580)
评论排行榜
1. 浅谈分页技术(63)
2. 什么才是程序员的命根子(52)
3. Windows Mobile 6 (Smart Phone)开发基础(48)
4. 动态加载控件UserControl到页面上 . 视图状态问题(43)
5. DotNet for Symbian平台 (Nokia,Sony,Motorola等手机)(38)
输入您的搜索字词
提交搜索表单
Web
www.google.com
www.baidu.com
www.cnblogs.com