簡體   English   中英

MVC C#在返回PartialView之前從控制器返回文件

[英]MVC C# Return file from controller before return PartialView

是否可以從同一控制器返回FileContentResult和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

此處的download()方法:

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

您需要針對2個不同的操作發出2個請求,以下載文件並顯示部分視圖。

顯示部分視圖的代碼似乎還可以,但是由於您未將其設置為操作的結果,因此該文件無法下載。

為了下載文件,您必須提出第二個請求。 您無法使用Ajax調用它,因為瀏覽器不會將其作為文件降級。 只需重定向到文件即可。 看到這個問題,看看怎么做: 使用Javascript / jQuery下載文件

如果部分視圖和文件基於同一報告,則這兩個請求可能會生成兩次,請考慮添加一些緩存,以避免多次生成具有相同參數的報告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM