2014-03-13 16 views
0

此代碼在另一個頁面的PageLoad函數中工作,並且我只是重定向到它。但是當我將它保留在同一頁面時,它會引發錯誤 -如何在asp.net中下載文件而不指向其他頁面

無法評估表達式,因爲代碼已經過優化或本機框架位於調用堆棧之上。

protected void Download(object sender, CommandEventArgs e) 
{ 
    //Response.Redirect("/Forms/Download.aspx?file="+sFile, false); 
    string sFile = "~/Attachments"+e.CommandArgument.ToString(); 

    If(File.Exists(Server.MapPath(sFile))) 
    { 
     string Path = Server.MapPath(sFile)); 
     FileInfo file = new FileInfo(path); 

     if (file.Exists)  
     { 
      Response.Clear(); 
      Response.ClearHeaders(); 
      Response.ClearContent(); 
      Response.AddHeader("Content-Disposition", "attachment; filename=" 
                   +file.Name); 
      Response.AddHeader("Content-Length", file.Length.ToString()); 
      Response.ContentType = "application/octet-stream"; 
      Response.WriteFile(file.FullName); 
      Response.Flush(); 
      Response.WriteFile(file.FullName); 
      Response.End(); 
     }  
    } 
} 

上次我得到這個錯誤時,有人建議給endResponse添加'false'。但是不知道這裏的位置。

回答

0
return File(document.Data, document.ContentType, document.Name); 

這會給用戶一個返回時的下載提示。

+0

如果這是在Download.aspx.cs。然後,該函數的返回類型是什麼。 – Ruby

+0

您可以簡單地使用對象作爲返回類型。 – woutervs

0

請嘗試的代碼序列如下:

 Response.Clear(); 
     Response.ClearHeaders(); 
     Response.ClearContent(); 
     Response.AddHeader("Content-Disposition", "attachment; filename=" 
                  +file.Name); 
     Response.AddHeader("Content-Length", file.Length.ToString()); 
     Response.ContentType = "application/octet-stream"; 
     Response.WriteFile(file.FullName); 
     Response.Flush(); 
     Response.Close(); 
     Response.End(); 
+0

在'Response.End()',它給出了同樣的錯誤。 – Ruby

+0

嘗試使用HttpApplication.CompleteRequest而不是Response.End() –

相關問題