Je travaille sur une application MVC4 et essaie de créer un fichier Excel en utilisant des rapports RDLC. Voici le code AJAX que j'ai écrit pour faire un appel à la méthode du contrôleur.Fichier Excel ne se télécharge pas avec AJAX dans MVC4
var actionUrl = '@Url.Action("MethodName", "ControllerName")';
$.ajax(actionUrl, {
type: 'POST',
data: { merchantAlias: merchantName2, merchantName: merchantName1, sDate: date1, eDate: date2, Incident: whichIncident, call: whichcall },
success: function (d) {
alert(d);
alert("success1");
}
});
J'ai essayé de déboguer l'application et vérifié que la méthode du contrôleur est appelée correctement et qu'elle renvoie le fichier. Il affiche également le message d'alerte "succès", . Toutefois, dans la vue, le fichier n'est pas téléchargé.
J'ai essayé une chose similaire en utilisant un lien hypertexte et j'ai envoyé des paramètres codés en dur à la méthode et le fichier est téléchargé. Le code suivant est:
<div><a href="@Url.Action("MethodName", new { merchantAlias = "someAlias", merchantName = "someName", sDate = "2015-01-01 00:00:00", eDate = "2015-01-01 00:10:00", Incident = "0", call = 1 })"> Get Report Excel</a></div>
Mais j'ai besoin de passer des paramètres dynamiques à ma méthode en fonction de la sélection faite par l'utilisateur sur la vue.
Voici le code écrit à l'intérieur du contrôleur Méthode:
LocalReport lr = new LocalReport();
lr.ReportPath = Path.Combine(Server.MapPath("~/Reports"), "MerchantExcelReport.rdlc");
DataTable dt = GetDataForExcel(merchantAlias, merchantName, sDate, eDate, Incident, call);
ReportDataSource rd = new ReportDataSource("MerchantExcelDataSet", dt);
lr.DataSources.Add(rd);
string reportType = "Excel", mimeType, encoding, fileNameExtension;
string deviceInfo =
"<DeviceInfo>" +
" <OutputFormat>" + reportType + "</OutputFormat>" +
" <PageWidth>8.5in</PageWidth>" +
" <PageHeight>11in</PageHeight>" +
" <MarginTop>0.5in</MarginTop>" +
" <MarginLeft>1in</MarginLeft>" +
" <MarginRight>1in</MarginRight>" +
" <MarginBottom>0.5in</MarginBottom>" +
"</DeviceInfo>";
Warning[] warnings;
string[] streams;
byte[] renderedBytes;
renderedBytes = lr.Render(reportType, deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
return File(renderedBytes, mimeType);
Que voulez-vous dire par "le fichier ne se télécharge pas"? Ajax appelle les données de téléchargement à partir du serveur mais ne provoque pas l'affichage du message de téléchargement à l'utilisateur. Vous pouvez obtenir le contenu du fichier Dans la méthode de succès, je suppose. –
Si c'est le cas, au lieu d'une demande de publication JSON, simuler un clic sur un lien hypertexte, –