4

脚本

function PostExportValues(meter_id, range_type_id, start_date, end_date, returnUrl) {
    var meter = $("#meter_selection").val()[0];
    $.ajax({
        url: '@Url.Action("GridExportToExcel", "Widget")',
        type: 'POST',
        data: { MeterType: meter_id, DateRangeType: range_type_id, StartDate: start_date, EndDate: end_date, returnUrl: returnUrl, Meter: meter },
        success: function () {
            alert("Success.");
        },
        error: function () {
            alert("Error!");
        }
    });   //end ajax
} //end PostExportValues

コントローラ

public void GridExportToExcel(int MeterType, int DateRangeType, DateTime? StartDate, DateTime? EndDate, string returnUrl, int Meter)
{
    Customers customer = CustomerManager.GetCustomer(WebSecurity.CurrentUserId);
    //if start date is null, then set it to another early date.
    DateTime startDate = DateTimeManager.GetStartDate(StartDate, DateRangeType, customer.sno);
    //if end date is null, then set to date time now.
    DateTime endDate = DateTimeManager.GetEndDate(EndDate, StartDate);

    IQueryable<MeterReadingsForChart> meterReadings = MeterReadingManager.GetCustomerMeterReadings(customer.sno, MeterType, Meter, startDate, endDate, DateTimeManager.GetTimeIntervalTypeById(DateRangeType)).AsQueryable(); // MeterReadingManager.GetCustomerTotalMeterReadings(customer.sno, MeterType, startDate, endDate, DateTimeManager.GetTimeIntervalTypeById(DateRangeType)).AsQueryable();
    var table = MeterReadingManager.GetMeterReadingsPivot(meterReadings, MeterType);

    //table output some thing like following:
    //T1 T2 T3
    //10 20 25
    //13 23 21
    //15 26 27

    var grid = new GridView();
    grid.DataSource = table;
    grid.DataBind();

    Response.ClearContent();
    Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");

    Response.ContentType = "application/excel";
    StringWriter sw = new StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);

    grid.RenderControl(htw);

    Response.Write(sw.ToString());
    Response.End();

    //return View("Index");
}

メソッドGridExportToExcelは機能しており、スクリプトの警告メッセージは ですがSuccess.、アクションはありません (何も起こりません)。

私は何が欠けていますか?Excelファイルが自動的にダウンロードされることを期待しています。

ありがとう...

4

3 に答える 3

9

ブラウザがファイルのダウンロードをトリガーしないため、ajaxクエリでファイルのダウンロードを呼び出すことはできません。コントローラメソッドへのajax呼び出しを使用しないでください。次のように使用できます。

window.open("url/Exporttoexcel?id=");

パラメータを追加します。

于 2013-01-14T10:53:46.993 に答える
0

また、使用できます

window.location.href = "controllerName/GridExportToExcel?id="
于 2015-10-09T06:32:53.630 に答える
0

問題は、ajax 呼び出しを介して実際にダウンロードできないことです。これを見ると:ファイルのダウンロードのような ajax を要求するための jQuery プラグイン

これはあなたを助けるでしょう!

于 2013-01-14T10:14:35.850 に答える