Verwenden von ASP.NET, ExtJS5, SQL Server und ClosedXML.Dateidownload, aber Dateidialog wird nicht geöffnet
Ich verwende ExtJS, um auf eine gespeicherte Datenbankprozedur zuzugreifen und die Ergebnisse in einer Excel-Datei auf dem Server mit ClosedXML zu speichern.
Die Datei wird ordnungsgemäß erstellt, und mit Blick auf den Netzwerkinspektor kann ich überprüfen, ob die Datei heruntergeladen wird, aber ich erhalte keine Art von Save
Dialog. Alles, was ich gefunden habe, sind Lösungen, um das Pop-up zu deaktivieren (ich würde dieses Problem gerne haben).
Ich habe auf Chrome, Firefox und IE, gleiche Geschichte für jeden versucht.
Die die Platte, die den Dienst aufruft:
Ext.define('Table', {
xtype: 'file-table',
extend: 'Ext.grid.Panel',
title: 'Stuff for Excel',
hideHeaders: false,
cls: 'striped-grid',
store: 'Stuff for Excel Store',
requires: [
'Ext.grid.selection.SpreadsheetModel',
'Ext.grid.plugin.Clipboard'
],
selModel: {
type: 'spreadsheet',
rowSelect: false,
columnSelect: true
},
plugins: ['clipboard', 'gridfilters'],
features: [{
ftype: 'grouping',
hideGroupedHeader: true,
startCollapsed: true
}],
columns: [{
text: '#1',
dataIndex: 'Name',
flex: 1,
filter: {
type: 'string',
itemDefaults: {
emptyText: 'Filter by...'
}
}
}, {
text: '#2',
dataIndex: 'Type',
flex: 1,
hidden: true,
filter: {
type: 'string',
itemDefaults: {
emptyText: 'Filter by...'
}
}
}, {
text: '#3',
dataIndex: 'Sub-Type',
flex: 1,
filter: {
type: 'string',
itemDefaults: {
emptyText: 'Filter by...'
}
}
}, {
text: '#4',
dataIndex: 'Sub-sub Type',
flex: 1,
filter: {
type: 'string',
itemDefaults: {
emptyText: 'Filter by...'
}
}
}, {
text: '#5',
dataIndex: 'Weight',
xtype: 'numbercolumn',
renderer: function (value) {
var out = value * 100;
return out.toFixed(1) + ' %';
},
flex: 0
}],
viewConfig: {
stripeRows: true
},
bbar: [{
xtype: 'panel',
flex: 1
}, {
xtype: 'button',
margin: 5,
padding: 10,
text: 'Export to Excel',
hidden: false,
flex: 0,
icon: '../Images/ExportReport.png',
handler: function() {
Ext.Ajax.request({
method: 'GET',
loadMask: true,
url: 'ReportingWebServices.asmx/CreateExcel',
params: {
'here': are,
'some': params
}
})
}
}]
});
Der entsprechende serverseitigen Code
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true, XmlSerializeString = false)]
public void CreateExcel()
{
string fileName = "Workbook.xlsx";
string filePath = "path\to\file";
ClosedXML.Excel.XLWorkbook workBook = new ClosedXML.Excel.XLWorkbook();
// Passing params, getting results from database,
// building the spreadsheet
if (File.Exists(filePath + fileName))
{
File.Delete(filePath + fileName);
}
workBook.SaveAs(filePath + fileName);
HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ";");
HttpContext.Current.Response.TransmitFile(filePath + fileName);
HttpContext.Current.Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
Wir können sehen, wie Sie die Datei übertragen, aber nicht wie Sie es aus dem Browser aufgerufen haben. Fügen Sie den Code hinzu, der die Datei herunterlädt, nicht den, der sie sendet, da der Fehler auf der Client-Seite sein sollte. – Gusman