2013-07-06 6 views
1

테이블을 내보내려면 다음과 같은 ASP.NET MVC 4 코드를 사용하십시오 (jTable jquery 플러그인에서 생성되었지만 관련없는 테이블 일뿐입니다). 다운로드 파일 대화 상자를 트리거하지 않습니다.Excel 코드로 내보내기가 다운로드되지 않습니다.

다른 문제는 HTML 인코딩 테이블이 .ajax() POST에 의해 전송되었지만 string inp = Request["input"];으로 값을 처리하려고 할 때 오류가 발생합니다. 나는 [ValidateInput(false)] 선언을 모두 사용하여 & [HttpPost] 뒤에 "HTML 테이블을 보냄에 따라"클라이언트에서 잠재적으로 위험한 request.form 값을 발견했다는 오류를 극복했지만 그 선언은 발생되는 "잠재적으로 위험한으로 Request.Form 값 ..."예외 - 내 .cshtml 페이지

코드

$("#exportToExcel").on("click", function (e) { 
       $.ajax({ 
        url: '/Reports/Export', 
        cache: false, 
        dataType: "html", 
        type: 'POST', 
        data: { input: $(".jtable").html() }, 
        success: function (data) { 

        }, 
        complete: function() { 

        } 
       }); 
      }) 

보고서 컨트롤러 코드 :

[ValidateInput(false)] 
[HttpPost] 
public void Export() 
{ 
    //string inp = Request["input"]; 
    string body = "<table><tr><td>2</td><td>3</td></tr><table>"; 
    Response.Clear(); 
    Response.AddHeader("content-disposition", "attachment;filename=data.xls"); 
    Response.Charset = ""; 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    //Response.ContentType = "application/vnd.ms-excel"; 
    Response.ContentType = "application/force-download"; 

    Response.Write("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">"); 
    Response.Write("<head>"); 
    Response.Write("<META http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"); 
    Response.Write("<!--[if gte mso 9]><xml>"); 
    Response.Write("<x:ExcelWorkbook>"); 
    Response.Write("<x:ExcelWorksheets>"); 
    Response.Write("<x:ExcelWorksheet>"); 
    Response.Write("<x:Name>Report Data</x:Name>"); 
    Response.Write("<x:WorksheetOptions>"); 
    Response.Write("<x:Print>"); 
    Response.Write("<x:ValidPrinterInfo/>"); 
    Response.Write("</x:Print>"); 
    Response.Write("</x:WorksheetOptions>"); 
    Response.Write("</x:ExcelWorksheet>"); 
    Response.Write("</x:ExcelWorksheets>"); 
    Response.Write("</x:ExcelWorkbook>"); 
    Response.Write("</xml>"); 
    Response.Write("<![endif]--> "); 
    Response.Write("<![endif]--> "); 
    Response.Write("</head>"); 
    Response.Write("<body>"); 
    Response.Write(body); 
    //Response.Write(inp); 
    Response.Write("</body>"); 
    Response.Write("</html>"); 
    Response.End(); 

} 

답변

2

파일 다운로드 응답 아약스 호출에서 얻을 수 없다면, 이것을 달성 할 수있는 방법은 거의 없다. 다음 중 하나가

$("#exportToExcel").on("click", function (e) { 
    var form = $('form'); 
    var input = $('<input type="hidden" name="input" value="" />'); 
    input.val($(".jtable").html()); 
    form.append(input); 
    form.attr('action', '/Reports/Export'); 
    form.attr('method', 'POST'); 
    form.submit(); 
}) 

희망입니다.

+0

감사합니다. @shakib. 이 정보는 나에게 유용 할 것이다. 내 주요 문제는 다운로드를 실행하는 것입니다. 컨트롤러 내보내기 메서드 코드가 더미 테이블에도 작동하지 않습니다. 일단 내가 진짜 테이블 내용을 보내 귀하의 코드를 사용할 수있는 작업을 얻을. – user2011507

+0

위에서 언급 한 코드가 다운로드를 시작합니다. 이제'Export' 액션을 올바른 데이터로 작동시켜야합니다. 이 메소드에서 액션 파라미터'public void Export (string input)'또는 formcollection'public void Export (FormCollection data) {var input = data [ "input"]; }' – shakib

+0

많은 감사합니다! 그것은 일했다! – user2011507

관련 문제