J'essaie d'envoyer une vue qui contient une table html comme un fichier téléchargeable à l'utilisateur, comme un fichier Excel.Servir une vue en tant que fichier dans asp.net mvc
Je reçois toujours l'erreur "Le serveur ne peut pas définir le type de contenu après que les en-têtes HTTP ont été envoyés.". Je ne peux pas comprendre ce qui se passe mal ...
Voici quelques code:
Excel.aspx:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>
<html>
<head runat="server">
<title>Excel</title>
</head>
<body>
....
</body>
</html>
ControllerAction:
public FileResult Excel()
{
string view = RenderViewToString(this.ControllerContext, "~/Views/Shared/Excel.aspx", null, this.ViewData, this.TempData);
MemoryStream stream = new MemoryStream(System.Text.Encoding.ASCII.GetBytes(view));
string mimetype = RainbowsDotNet.FileHandling.MimeType.GetMimetypeFromExtension(".xls");
FileStreamResult filestreamresult = new FileStreamResult(stream, mimetype);
filestreamresult.FileDownloadName = "Employees_{0}.xls".FormatWith(DateTime.Now.ToString("ddMMyyyy_HHmmss"));
return filestreamresult;
}
Bien que le débogage, la chaîne « vue "contient:
"\r\n<html>\r\n<body>............................"
Une idée? Je fais à peu près la même chose avec un blob et ça retourne bien un document à télécharger.
Je sais que c'est évident, mais vos en-têtes ont déjà été envoyés au client, vous devez donc savoir pourquoi. Qu'est-ce qui déclenche que les en-têtes ont déjà été envoyés. Vous n'avez peut-être pas activé la mise en mémoire tampon? Etes-vous volontairement désactivant la mise en mémoire tampon ailleurs? –
votre "vue" des données est un YSOD (Yellow Screen Of Death), je commencerais là – mxmissile
hmm, je n'ai pas touché le tampon, mais quand même. Je fais exactement la même chose que dans un autre contrôleur où je retourne aussi des documents et cela fonctionne bien là ... juste un FileResult qui renvoie un FileStreamResult .. –