J'ai un contrôleur avec deux pages, Index et téléchargement, en cliquant sur télécharger, il récupère un byte [] du service et j'utilise Response.BinaryWrite pour enregistrer le fichier. Le problème avec ceci est que lors de l'utilisation de Response.Clear, il arrête la page de téléchargement du rendu mais télécharge le fichier avec succès. Est-il possible de télécharger le fichier et de rendre la page?Comment: Enregistrer un fichier à partir d'un service Web sans arrêter la page de rendu
J'utilise .NET 4, ASP, Château Monorail, C#
Je suis conscient qu'en utilisant MVC, je suis en mesure d'utiliser ActionResult et FileResult comme types de retour pour mon point de vue, je suis cependant limité à l'utilisation Monorail Castle est un projet existant dont j'ai récemment pris possession et qui n'a aucun poids pour changer sa technologie.
Ci-dessous mon exemple de code
public class MyController : Controller
{
public void Index()
{
PropertyBag["includeZeroBalances"] = false;
PropertyBag["toDate"] = DateTime.Today.ToShortDateString();
}
public void Download(bool includeZeroBalances, DateTime toDate)
{
MyProxy proxy = GetProxy();
byte[] file = proxy.GetFile(includeZeroBalance, toDate);
Response.Clear();
Response.ContentType = "application/zip";
Response.AppendHeader("Content-Disposition", "attachment; filename="TestFileName.zip");
Response.BinaryWrite(file);
}
}
Voici la page d'index
${Form.FormTag({@action: 'Download'})}
<table>
<tr>
<td>${Form.LabelFor("toDate", "To Date (yyyy/mm/dd):")}</td>
<td><input type="text" id="toDate" name="toDate" value="${?toDate}" /></td>
</tr>
<tr>
<td>${Form.LabelFor("includeZeroBalances", "Include Zero Balances:")}</td>
<td>${Form.CheckboxField("includeZeroBalances")}</td>
</tr>
<tr>
<td> </td>
<td>${Form.Submit("Download", {@class: 'submitb'})}</td>
</tr>
</table>
${Form.EndFormTag()}
Voici la page de téléchargement
<table>
<tr>
<td>Your file has been downloaded successfully</td>
</tr>
</table>
Salut Mauricio, merci pour les liens et les idées que vous nous avez fournis. Malheureusement, ce n'était pas tout à fait ce que je cherchais. –
@ROFFELPOMP: Eh bien, c'est exactement ce que vous avez fait dans votre réponse. –