2017-06-15 37 views
-1

我發送一個帶有一些數據的excel文件來插入數據庫。如何在asp.net mvc 5中一次返回一個文件和一些數據

對於每一行我必須驗證數據,如果該行有無效的數據我必須返回只有無效行的文件。

下載,閱讀和返回工作正常,但是當我返回包含無效值的文件時,我必須通過編寫一個告訴用戶下載的文件包含具有無效數據的行的文本來更新模式,所以用戶可以重寫併發回。

我被submiting和形式,並在行動這樣receaving發送文件:

public ActionResult LoadData(HttpPostedFileBase _file) 

和返回是這樣的:

Response.Clear(); 
Response.Buffer = true; 
Response.Charset = ""; 
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
Response.AddHeader("content-disposition", "attachment;filename= Colabs.xlsx"); 

using (var stream = new MemoryStream()) 
{ 
    xlWorkbookFile.SaveAs(stream); 
    stream.WriteTo(Response.OutputStream); 
    Response.Flush(); 
    Response.End(); 
} 
+0

而你的問題是......? –

+0

不僅返回文件,還返回一些可在客戶端讀取的數據。 –

+0

本質上你不能。這不是HTTP的工作原理。你在響應蘋果時會咬一口。這是一個HTML文檔**或**文件下載,從來都沒有。但是,您*可以*返回一個帶文件下載鏈接的HTML文檔,這是一個典型的解決方法。 –

回答

0

我創辦的解決方案是:

  • 之前提交,創建,搜索將在控制器中創建一個cookie的間隔;
  • 你會將額外的數據存儲在cookie中,並用javascript讀取它們;

在控制器創建的cookie:

Response.AppendCookie(new HttpCookie("someDataCookieName", dataValue)); 

在JS,檢查值:

function CheckForValues() { 
    intervalId = window.setInterval(function() { 
     var cookieValue = $.cookie('someDataCookieName'); 
     if (cookieValue == token) { 
      alert(cookieValue) 
     } else if (stopInterval) { 
      clearInterval(intervalId); 
      stopInterval = false; 
     } 
    }, 1000); 
} 

如有錯誤occours您可以創建自己的條件停止。

1

當您發送內容處置標頭值一個附件,這意味着瀏覽器將其視爲下載的文件。用戶界面是從來沒有與響應更新

你可以參考:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition

解決您的問題,您應該返回與模式(不要與文件作出迴應)你的行動的結果,並在您的視圖保持一個隱藏iframe指向該可下載文件(或發送該文件的單獨操作的URL)。

相關問題