说一下我的设计:
两个页面,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;//从数据库中读出的路径附值给TextReadMail.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();
             
            }
        }代码已经都贴出来了,请求解答,再拜谢`~~~

解决方案 »

  1.   

    你可以试试不直接执行b页面
    而是
    模拟按钮的click()事件
    再你循环的地方 
    document.getElementById('Button5').click();
      

  2.   

    hb_gx(高升) 呵呵,这样做简单一点嘛cpp2017(慕白兄) 这个,请问如何改?我比较菜,
      

  3.   

    hertcloud(·£DOTNET@C/C++£·做个热心人) ( ) 信誉:100   
     
    你可以试试不直接执行b页面
    而是
    模拟按钮的click()事件
    再你循环的地方 
    document.getElementById('Button5').click();
    ————————
    这个,我见识少,没弄过,能再说详细一点吗,
      
     
      

  4.   

    objxml.open("GET",httpurl,false);
      objxml.send();
     window.open(httpurl,"");
      

  5.   

    cpp2017(慕白兄) ( ) 信誉:100    Blog  2007-2-2 10:38:02  得分: 0  
     
     
       
    objxml.open("GET",httpurl,false);
      objxml.send();
     window.open(httpurl,"");
    ————
    慕白兄,你太牛X了,果然行了,
    能不能再问一下,我有一个页面第一次进去的时候好好的,我后退一下再进去就不行,简直就是经不起测试“/OA”应用程序中的服务器错误。
    --------------------------------------------------------------------------------列“filename”被约束为是唯一的。值“本.txt”已存在。
      

  6.   

    列“filename”被约束为是唯一的。值“本.txt”已存在。重复提交的问题.==========
    如果不想偷懒,直接加个trycatch 到 -2627的错误,就提示它数据重复,
    要不然,保存前先检查数据是否重复