2016-04-26 10 views
0

Webメソッドではないときに正常に動作したhtmlに変換するコントローラメソッドがありました。しかし、html文字列が大きすぎると作業が中断されました。私はそれをjQuery経由で呼び出すWebメソッドに変換しました。データをメソッドに渡しますが、Excelファイルは作成されません。メソッド内のコードは変更されていません。唯一の違いは、私がそれを呼び出す方法と[HttpPost]装飾です。コードは次のとおりです。C#MVC EXCELが動作しない

[HttpPost] 
    [ValidateInput(false)] 
    public void ExportExcel(string aContent) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append(aContent); 

     Response.ClearContent(); 
     Response.ContentType = "application/vnd.ms-excel"; 
     Response.AddHeader("Content-Disposition", "attachment; filename=ProjectData.xls"); 
     Response.Write(sb); 
     Response.End(); 
    } 

そして、これは、jQueryのものである:

// namespace 
var excel = excel || {}; 

$(document).ready(function() { 
    $('#ExcelUrl').on('click', function() { 
     var table = $('#tableName').val(); 
     var content = $('#' + table).html(); 
     excel.utilFunctions.exportToExcel(content); 
    }); 
}); 

excel.utilFunctions = (function ($) { 
    var exportToExcel = function (content) { 
     $.ajax({ 
      url: "/Home/ExportExcel", 
      type: "POST", 
      data: { aContent: content } 
     }).done(function(data) { 
      alert(data); 
     }).fail(function(error) { 
      alert(error.responseText); 
     }); 
    }; 

    //public functions 
    return { 
     exportToExcel: exportToExcel 
    }; 
})(jQuery); 

すべてのヘルプは高く評価されています。

答えて

0

解決策が見つかりました。どうやら、jQueryは投稿を行っているので、あなたが何をしてもファイルは生成されません。

jQuery関数を変更して、自分のデータが入っている隠しフォームフィールドを作成して送信しました。

$(document).ready(function() { 
    $('#ExcelUrl').on('click', function() { 
     var table = $('#tableName').val(); 
     var content = $('#' + table).html().replace(/\s/g, ""); 
     excel.utilFunctions.exportToExcel(content); 
    }); 
}); 

excel.utilFunctions = (function ($) { 
    // Excel export function 
    var exportToExcel = function (content) { 
     var form = $("<form></form>"); 
     form.attr("method", "POST"); 
     form.attr("action", "/Home/ExportExcel"); 
     var dataField = $("<input/>"); 
     dataField.attr("type", "hidden"); 
     dataField.attr("name", "aContent"); 
     dataField.attr("value", content); 
     form.append(dataField); 
     $(document.body).append(form); 
     form.submit(); 
    }; 

    //public functions 
    return { 
     exportToExcel: exportToExcel 
    }; 
})(jQuery); 

そしてIはFileStreamResult

public FileStreamResult ExportExcel(string aContent) 

を返すようにExportExcelコントローラ機能を変更し、実際の輸出

var byteArray = Encoding.ASCII.GetBytes(aContent); 
var stream = new MemoryStream(byteArray); 

return File(stream, "application/ms-excel", "FileName.xls"); 
を行うコードを改変しました
関連する問題