2012-08-16 2 views
0

내 문제는 다음과 같습니다. mvc3 프로젝트가 있습니다. 문제는 엑셀 시트로드 페이지에 있습니다. 먼저 Excel 시트를 데이터베이스에 업로드하고 싶습니다. 다음으로 나는 pdf를 엑셀 시트에 기초하여 작성하고 그 pdf를 사용자에게 반환한다. 마지막으로 ui의 행을 업데이트하려는 경우 새로운 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" /> 
    } 

버튼이 내 텍스트에 전에 소개 무엇을 그 기능을 어떻게해야 제출합니다.

[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) 
    { 

    } 
} 

난 더 이상 사용자에게 반환하지 않습니다 null 또는 emptyResult PDF 것보다 다른 것을 반환하는 경우 : 나는 시트를 엑셀 및 PDF - 문서를 만들로드하는 방법이다. 내가 createPdf 및 응답 데이터를 작성하는 방법이다 : 나는 PDF 문서는 사용자까지 종료 후 처리 JQuery와 내가 처리하여 진행 할 수 아약스을 위해 노력했다

[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); 
} 

,하지만 난 예를 아약스을 위해 할 때 게시 작업이 성공 메시지를 반환하지 않습니다. 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 2. pdf로 파싱 Excel 3. pdf를 사용자에게 반송하십시오. 4. 업데이트 ui (사용자에게 pdf를 반환 한 후 문제가 발생 함)

나는 누군가가 나를 도울 수 있다면 정말 preciated. 나는 그것을 어떻게 할 수 있습니까?

+1

: 리턴 파일 ((바이트 []) blackGinBarCodePdf를 " 응용 프로그램/pdf "); –

답변

0

당신은 파일과 하나 개의 응답에 다른 데이터를 (물론, 실제로 당신이 그것을 할 수 있지만이 제대로 브라우저에 의해 처리되지 않습니다) 반환 할 수 없습니다.

  1. 것은 어딘가에 결과 상태로 서버 (파일 시스템/ 데이터베이스)
  2. 반환 JSON (또는 다른 결과) 및 파일
  3. 의 일부 ID에 PDF를 저장 (또는 엑셀) : 올바른 방법이다
  4. 파일 ID가
  5. 인 URL에 클라이언트 (AJAX가 아닌 단순한 window.location 또는 일부 양식을 일부 URL에 게시)에서 요청을 보내면 FileResult (http://msdn.microsoft.com/en- 우리/라이브러리/system.web.mvc.fileresult.aspx)이 URL
을위한 행동에서 , 당신이 컨트롤러를 위해 제공되는 파일의 방법을 사용할 수 있습니다 (좀 더 일반적인 ASP보다는 MVC 인) 응답에 PDF 결과를 작성하는 대신
+0

그래, 고마워, 그런 식으로 바꾸려고 노력해. – user1600393

+0

그런 식으로 잘 작동하고 있습니다. 여러분 모두 정말 큰 감사드립니다. 하나의 질문은 여전히 ​​나를 혼란스럽게합니다. 필자는 mvc3를 사용하여 거의 잃어 버리지 않았지만, FileResult를 반환하면 어떻게하면 다시 사용자에게 반환 할 수 있습니까? Rene이 나를 안내하는 방법에 대한 문서를 반환하면 클라이언트 윈도우로 바로 반환됩니다.나는 그 문서가 윈도우를 다운로드하는 사용자에게 돌아 가기를 원한다. (나는 방법, 당신 downnloading 파일을 의미합니다.) 그러나 이것은 asp.net 스타일로 내가 일하고 싶었던 방식으로 작동하기 때문에 더 이상 중요하지 않습니다. ASP와 같은 방법으로 fileResult를 사용하는 것이 간단 할까? – user1600393

+0

이 속성을 설정해보십시오. http://msdn.microsoft.com/en-us/library/system.web.mvc.fileresult.filedownloadname%28v=vs.98%29.aspx – oryol

관련 문제