2012-08-16 20 views
0

我的問題如下: 我有mvc3項目。問題出在excel表單加載頁面。首先,我想將Excel表格上傳到數據庫。接下來,我根據該Excel表創建PDF,並將該PDF返回給用戶。最後,我想更新用戶界面中的行,新的Excel表已經加載。如何將文件返回給用戶並更新UI

所以主要的問題是我不能在將pdf文檔傳遞給用戶之後更新行。

這是我試過的簡短例子。首先是我的客戶端上傳。 (我用Microsoft.Web.Helpers.FileUpload分量):

 @using (Html.BeginForm("NewFile", "LoadData", FormMethod.Post, new { enctype = "multipart/form-data" })) 
    {  
     @FileUpload.GetHtml(initialNumberOfFiles: 1, allowMoreFilesToBeAdded: false, includeFormTag: false, addText: "Add Files", uploadText: "Upload File") 
     <input type="submit" name="submit" id="submit" value="Lataa tiedot" /> 
    } 

用戶按下後提交按鈕應該發生的功能就是我在我的文字前出臺。這是我的加載Excel工作表,並創建PDF文件:

[HttpPost] 
public ActionResult NewFile(IEnumerable<HttpPostedFileBase> fileUpload, bool checkPrintAlso, bool chkBigCards, int hiddenCustomer, string comment) 
{ 
    try 
    { 
     foreach (var file in fileUpload) 
     { 
     if (file != null && file.ContentLength > 0) 
      { 
       var excelService = new ExcelService(); 
       var trackingCodes = excelService.NewLoadData(file, User.Identity.Name, comment, hiddenCustomer); 
       if (checkPrintAlso) 
       { 
        CreatePdf(trackingCodes, chkBigCards); 
        return new EmptyResult(); 
       } 
      } 

     return RedirectToAction("Index", error); 
    } 
    catch (Exception e) 
    { 

    } 
} 

如果我回來的東西比空或emptyResult PDF否則不會再返回到用戶。我這是怎麼createPdf和寫入數據的響應:

[HttpPost] 
public void CreatePdf(IEnumerable<TrackingCode> trackingCodes, bool isBig) 
{ 
    //This creates pdf 
    var blackGinBarCodePdf = new BlackGinBarcodePdf(trackingCodes, isBig); 
    Response.ContentType = "application/pdf"; 
    Response.AddHeader("Content-Disposition", string.Format(CultureInfo.InvariantCulture, "attachment;filename=Receipt-{0}.pdf", "briefcases")); 
    Response.BinaryWrite((byte[])blackGinBarCodePdf); 
} 

我已經試過了PDF文檔最終用戶以後做處理jQuery和AJAX,我才能夠着手處理,但是當我例如AJAX做發佈操作它不返回成功消息。它將在Mozilla上返回錯誤代碼0,並且IE返回代碼500(內部服務器錯誤)。這是我已經試圖在阿賈克斯發帖:

$("#submit").click(function() 
{ 
    $.ajax(
    { 
     url: "/LoadData/NewFile", 
     type: 'post', 
     error: function (xhr, ajaxOptions, thrownError) 
     { 
      alert(xhr.status); 
      alert(thrownError); 
     }, 
    success: function (data) { } 
    }) 
    //add row to ui! 
    ; 
}); 

所以希望有人能夠理解我的問題。再次,點擊按鈕後,我需要做什麼。 1. LoadExcel to db 2.解析excel爲pdf 3.將pdf返回給用戶。 4.更新UI (問題是在將pdf返回給用戶後更新ui)

如果有人可以幫助我,我真的很樂觀。我真的很困惑我該怎麼做?

+1

您可能想要使用爲控制器提供的File方法:return File((byte [])blackGinBarCodePdf,而不是將您的PDF結果寫入Response(這是一種更正常的ASP而不是MVC)應用/ PDF「); – 2012-08-16 07:16:23

回答

0

你不能在一個響應中返回文件和其他數據(當然,你可以做到這一點,但瀏覽器不能正確處理它)。正確的方法是:

  1. 保存PDF(或只是Excel)中某處的服務器(文件系統/ 數據庫)
  2. 返回JSON(或其他結果)與結果狀態和文件
  3. 的一些ID上
  4. 向客戶端發送請求(不是AJAX,只是簡單地改變window.location或向某個URL發佈某種形式)到一些帶有您的文件ID的URL
  5. Return FileResult(http://msdn.microsoft.com/zh-cn/ us/library/system.web.mvc.fileresult.aspx)
+0

好的,謝謝,我試圖改變它的工作方式。 – user1600393 2012-08-16 09:25:39

+0

它正在很好地工作。非常感謝你們兩位。一個問題仍然讓我困惑。可能是我用mvc3丟失了一點,但是如果我返回FileResult,我怎麼才能直接返回給用戶。如果我將Rene如何返回給我,它會直接返回到客戶端窗口。我希望該文件將返回到用戶下載窗口。 (我的意思是,你如何下載文件。)然而,這不是那麼重要,因爲它會工作,我想如何工作的asp.net風格。只是好奇它是如同與ASP相同的方式來處理fileResult? – user1600393 2012-08-16 09:56:41

+0

嘗試設置此屬性:http://msdn.microsoft.com/en-us/library/system.web.mvc.fileresult.filedownloadname%28v=vs.98%29.aspx – oryol 2012-08-16 15:03:32

相關問題