实现目标:
做一个上传控件(服务器端控件).点击"确定"上传时,控件局部刷新,引用页面不回发。
现有解决方案及问题:第一种
方案:在控件项目中嵌入一个ASPX页面或ASP页面.控件输出HTML Iframe这个页面。
问题:发现ASPX页面和ASP页面并不能嵌入,或者可以说是嵌入后,不会执行后台代码。第二种
方案:控件输出HTML JS. 以Ajax的方式提交上传.
问题:其实与第一种方案的问题一样,Ajax提交给谁啊? 也需要有接收页面,但这个页面如何嵌入项目呢?
提示:除非实在无法实现,我才会考虑调用控件以外的一个页面。
有哪位大侠做个类似的,给提点一下,多谢拉。
做一个上传控件(服务器端控件).点击"确定"上传时,控件局部刷新,引用页面不回发。
现有解决方案及问题:第一种
方案:在控件项目中嵌入一个ASPX页面或ASP页面.控件输出HTML Iframe这个页面。
问题:发现ASPX页面和ASP页面并不能嵌入,或者可以说是嵌入后,不会执行后台代码。第二种
方案:控件输出HTML JS. 以Ajax的方式提交上传.
问题:其实与第一种方案的问题一样,Ajax提交给谁啊? 也需要有接收页面,但这个页面如何嵌入项目呢?
提示:除非实在无法实现,我才会考虑调用控件以外的一个页面。
有哪位大侠做个类似的,给提点一下,多谢拉。
解决方案 »
- System.IO.Stream问题!请求帮助!!!
- asp.net模板标题怎么在其它页面更改?
- 为什么文本控件有选不中的现象
- 在asp中怎样把一个合计数(变量)显示出它的金额大写
- 如何在asp.net中实现如c/s架构里的程序中断功能
- 谁有"构建基于Office SharePoint Server 2007的企业信息门户与协同办公平台"的PPT呀
- Panel 的简单问题,初学asp.net,帮忙看看
- 哈希值比较(String.Compare)出问题.大家来讨论一下.
- 关于SQL Server建表中设置标识的问题
- table的数据绑定问题
- 在静态页面中用载入JS的方式载入动态页面的问题!!!
- 内容页修改母版页内容
<iframe id="iframe" src ="WebForm3.aspx" ></iframe> 2:iframe中的内容页WebForm3.aspx Code
<form name="iform" method="post" enctype="multipart/form-data">
<div id="FUA_myIframe">
<input id="file" type="file" name="image" onchange="mjFileUpLoad_mjFileUpLoad11upload()" />
</div> <script language="javascript"> function mjFileUpLoad_mjFileUpLoad11upload()
{
var action = 'http://localhost:8397/WebForm3.aspx';
document.forms[0].action = action;
setTimeout('document.iform.submit()',1);
} </script></form>
它的内容也比较简单,这里为了说明方便,就不实现具体的上传过程了,如果是用户提交的文件,则显示出文件名称即可. if (Request.Files.Count>0)
{
Response.Write(Request.Files[0].FileName.ToString());
} 这个内容页主要包含了一个html的上传控件,它有一个onchange事件,当事件触发后,重载页面内容,完成显示文件名的过程(无刷新上传).内容页刷新了,但是对于用户来说是看不出来的.而且内容页在完成文件上传的同时,用户就可以填写其它相关信息了,起到了一个同步的作用. 这种实现方法有优点也有缺点: 优点:用户体验提高了,节约了等待时间. 缺点:需要开发额外的上传页面即内容页. 其实这个方案是否值得采用关键看具体的项目环境,如果用户传的图片小那也就没太大的价值.上面的例子只是为了说明基于iframe实现无刷新功能的原理,比较简单,但要想实现这种无刷新功能的封装,并非如果简单,不过都是同样的原理. 某次在一开源网站中看到了FileUploadAJAX 控件,它把一个无刷新上传的功能封装成一个控件,调用非常方便,而且功能也特别多,且非常具有实用性,本人根据源码重新封装了下,并没有增加功能,只是觉的源码注释太少,看起来有点费劲. 此控件支持如下功能:
1:多文件上传.
2:可以配置最大上传文件个数.
3.自定义js脚本.
4.支持删除已经上传的文件.
5.支持无刷新上传效果(iframe).
6.可配置相关提示文本 此控件是基于iframe方式实现的无刷新,开发人员并不需要开发iframe中的内容页,控件采用当前页来充当iframe的内容页. Code
protected void Page_Load(object sender, EventArgs e)
{
//判断是否发生上传控件提交事件
if (mjFileUpLoad1 .IsPosting)
this.managePost();
}
/**//// <summary>
/// 保存文件
/// </summary>
private void managePost()
{
HttpPostedFileAJAX pf = mjFileUpLoad1.PostedFile;
this .Label1 .Text = mjFileUpLoad1 .SaveAs("~/", pf.FileName);
}
控件属性IsPosting可以标识是否触发上传事件.只有这种情况下才会触发保存文件事件,否则不会影响原页面的加载 . 在这里放几个截图来供大家参考下: 初始化页面后的效果,这里可上传两个文件:
参考:http://www.evget.com/zh-CN/Info/catalog/10454.html
没有其他任何文件了。
参考
这个项目编译出一个叫做 MultiFileUploadControl 的asp.net服务器控件。
其一,最好不用Silverlight.
其二,他还是把FileUpload.ashx这玩意外置了。
方案:控件输出HTML JS. 以Ajax的方式提交上传.
问题:其实与第一种方案的问题一样,Ajax提交给谁啊? 也需要有接收页面,但这个页面如何嵌入项目呢? 上传可以用js,XMLHttpRequest调用Webservices上传