有点奇怪,可能只需要一个小小的改动就能搞定,请帮我看一下,来看的都有分
说一下我的设计:
两个页面,ReadMail.aspx和DownLoad.aspx
在ReadMail.cs中:从数据库中读出附件路径如a/aa;b/bb;c/cc
然后把它附值给一个Text
在ReadMail.aspx中:写了个js方法,先取得Text中附件路径,把它分号之间的路径分割开来,然后在一个循环中调用DownLoad页面
在DownLoad页面中:只是下载
假设:当这封邮件有两个附件,则附件地址如a/aa;b/bb
问题:当我打开ReadMail页面,第一次点击附件下载按钮时,它只弹出一个下载页面,就是说不能循环调用下载页,但是我第二次点击附件下载按钮时,就可以正常循环弹出两个下载页面,为什么会这样?而且再继续点的话,又只弹出一个,再点则又恢复正常,奇怪,请帮我看看,谢谢~!~~
下面我把主要程序贴出来:
ReadMail.cs:
string path = dr["附件上传地址"].ToString();
filepath = path.ToString().Trim();
filepath = filepath.Substring(0, filepath.Length - 1);//去掉最末尾的分號
HiddenPath.Value = filepath;//从数据库中读出的路径附值给Text
ReadMail.aspx:
function DownLoadClick()
{
var AllUrl =document.getElementById("HiddenPath").value;
var ArrAllUrl=AllUrl.split(";");
var objxml = false;
for(var i=0;i<ArrAllUrl.length;i++)//循环执行下载页
{
var httpurl="Down.aspx?filepath="+escape(ArrAllUrl[i]);
try
{
objxml = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
objxml = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e2)
{
objxml = false;
}
}
objxml.open("GET",httpurl,true);
objxml.onreadystatechange = function()
{
if(objxml.readyState==4)
{
if(objxml.responseText!="")
{
//下载成功
window.open(httpurl,"");
}
}
}
objxml.send();
}
}
——————
<input id="Button5" type="button" value="附件下载" onclick="DownLoadClick()" runat="server" />
<input id="HiddenPath" type="text" runat="server" />
DownLoad.cs:
if (!IsPostBack)
{
string sPath = Request.QueryString["filepath"];
if (!string.IsNullOrEmpty(sPath))//传递的参数不为null和空时
{
string sLocalPath = Server.MapPath(sPath);
FileInfo DownloadFile = new FileInfo(sLocalPath);
Response.Clear();
Response.ClearHeaders();
Response.Buffer = false;
Response.ContentType = "application/octet-stream";
Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(DownloadFile.FullName, System.Text.Encoding.UTF8));
Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
Response.WriteFile(DownloadFile.FullName);
Response.Flush();
HttpContext.Current.Response.Write("Down Succeed!");
// 向客户端发出当前所有缓冲的输出
HttpContext.Current.Response.Flush();
}
}
代码已经都贴出来了,请求解答,再拜谢`~~~