2010-07-14 12 views

Répondre

0

Il suffit d'émettre un en-tête HTTP Content-Disposition dans votre code de gestionnaire HTTP. La plupart des navigateurs interpréteront cela comme une demande de téléchargement. Remplacez yourfile.csv par le nom de fichier que vous voulez que l'utilisateur voit.

context.Response.ContentType = "text/csv"; 
context.Response.AddHeader("Content-Disposition", "attachment; filename=yourfile.csv"); 
11

Je crée généralement un gestionnaire générique (.ashx) et faire quelque chose comme ceci:

public void ProcessRequest(HttpContext context) 
{ 
    StringBuilder myCsv = new StringBuilder(); 
    foreach(myRow r in myRows) { 
    myCsv.AppendFormat("\"{0}\",{1}", r.MyCol1, r.MyCol2); 
    } 

    context.Response.ContentType = "application/csv"; 
    context.Response.AddHeader("content-disposition", "attachment; filename=myfile.csv"); 
    context.Response.Write(myCsv.ToString()); 
} 

Maintenant, si le CSV vous construisez est vraiment grand, vous voudrez peut-être écrire chaque ligne comme vous le créez, plutôt que de le bourrer dans un StringBuilder.

+2

Juste un petit ajout au code ci-dessus: J'ai trouvé que j'avais besoin d'ajouter context.Response.Flush(); context.Response.End(); à mon code lorsque j'ai implémenté quelque chose de similaire à ceci. – Malice

Questions connexes