2016-12-26 9 views
0

FileContentResultとPartialViewを同じコントローラから返すことは可能ですか?私はそれを働かせることはできません。メインコントローラコード:ここMVC C#返す前にコントローラからのファイルを返すPartialView

... 
var generateClass = new GenerateExcel(); // create obj of another class 
generateClass.Generate(reports); // generate .xlsx file and save it to server disk 
Download(); // ??? download file to client PC via "Save as.." dialog 

return PartialView("_PartialReport", reports); // second (main) return and the end of controller 

ダウンロード()メソッド:

public FileContentResult Download() 
{ 
    using (HostingEnvironment.Impersonate()) 
    { 
     byte[] doc = System.IO.File.ReadAllBytes(@"C:\temp\BLP.xlsx"); 
     // doc is OK, it's size == size of .xlsx file 
     return File(doc, "application/vnd.ms-excel"); 
    } 
} 

エラーなしただし機能しない... ヘルプ誰かしてください?

更新:AJAXのコード例

// Generate report by creation date 
function ConstructReportByDate() { 

    var date1 = $('#DateFrom').val(); 
    var date2 = $('#DateTo').val(); 

    $.ajax({ 
     url: '/Reports/ConstructReport', 
     type: "POST", 
     contentType: 'application/json; charset=utf-8', 
     cache: false, 
     data: '{"kind":"byDate", "date1":"' + date1 + '", "date2":"' + date2 + '"}' 
    }) 
    .done(function (data) { 
     $('#Report').html(data); 
    }) 
    .fail(function (xhr) { 
     alert('errorHere'); 
    }); 
} 
+0

いいえ。それらは2つの異なるアクション呼び出しです。 – Nkosi

+2

2件の結果を送信したいので、2件のリクエストが必要です。 2つの要求を行うためにアクションを呼び出すコードを変更する必要があります。 – glacasa

+0

glacasaが言ったことは、$(document).readyにAjaxコールを作成し、2番目のアクションを取得するだけです。 – Valkyrie

答えて

1

あなたは、ファイルをダウンロードすると、2つの異なるアクションに、部分的なビューを表示するには、2つのリクエストを作成する必要があります。

部分表示を表示するコードはOKですが、アクションの結果として設定しないため、ファイルはダウンロードされません。

ファイルをダウンロードするには、もう一度要求する必要があります。ブラウザはファイルとしてダウンロードしないため、Ajaxを使って呼び出すことはできません。ファイルにリダイレクトするだけです。 Download File Using Javascript/jQuery

部分レポートとファイルが同じレポートに基づいている場合、2つの要求で2回生成される可能性があります。同じパラメータ。

+0

ありがとう、@glacasa – SPNick

関連する問題