EDIT: Har netop løst dette problem og vil blot dele løsningen med jer.
P.S. Siden er ikke uploadet endnu så resultatet kan ikke ses endnu på min side desværre.
Der er tre sider:
DownloadCV.aspx
DownloadTak.aspx
DownloadStart.aspxDownloadCV.aspx har radiobuttons til at vælge download eller åben og en download-knap. På denne knap har jeg følgende kode:
- protected void cmdDownload_Click(object sender, EventArgs e)
- {
- string ToRedirectURL = "DownloadTak.aspx";
- if (rbActions.SelectedItem.Text.ToLower() == "download")
- ToRedirectURL += "?action=Download";
- else
- ToRedirectURL += "?action=Open";
- Response.Redirect(ToRedirectURL);
- }
DownloadTak.aspx har en tekst om at jeg takker for man downloader mit cv og at den ønskede handling snart startes.
På dens pre_init har jeg:
- protected override void OnPreInit(EventArgs e)
- {
- string action = Request.QueryString["action"];
- string newURL = "DownloadStart.aspx";
- newURL += "?action=";
- newURL += action;
-
- string refreshString = "5;URL=" + newURL;
- Response.AppendHeader("Refresh", refreshString);
-
- base.OnPreInit(e);
- }
Der bruges init for at lave dette så tidligt som muligt i processen. 5-tallet betyder at efter 5 sekunder vil den automatisk redirecte til den URL der er defineret - altså den sender den til DownloadStart.aspx med den "action" som der valgt på forrige side.
På
DownloadStart.aspx sættes den ønskede action igang:
- string action = Request.QueryString["action"];
-
- Response.ContentType = "application/pdf";
- if (action.Trim().ToLower() == "download")
- Response.AppendHeader("content-disposition", "attachment;filename=LauritsW.pdf");
- Response.TransmitFile(Server.MapPath("~/CV/LauritsW.pdf"));
- Response.Flush();
- Response.End();
Hvis der er valgt download så tilføjes attachment header og derved kommer en dialog i de fleste browsere, og ellers sendes filen "blot" til browseren som oftest åbner den.
---------------------------------------------------------------------------------------------------------------
Hejsa allesammen
Jeg har før set sider, hvor man kommer til en side med din download vil starte om lidt og der så står tak fordi du downloader blah blah blah.
Jeg vil gerne lave noget lignende på min side med min pdf-fil.
Mit successcenarie ville være at starte en download baseret på brugerens ønsker, hvorefter siden flyttes til en takkeside.
Men efter at have set lidt på sagen kan jeg se det ikke er så nemt endda (ihvertfald ikke for mig).
Mine ønsker er også at brugeren skal vælge om filen skal åbnes i browseren eller der skal komme den popup der siger gem/åben/annuller.
Jeg er klar over at forskellen er om der bruges
- Response.AddHeader("Content-Disposition", "attachment; filename=LauritsW.pdf"); //åben popup
- Response.AddHeader("Content-Disposition", "inline;filename=LauritsW.pdf"); //åben i browser
Jeg har fået den løst på 2 måder:
1 MÅDE:
ProfessionelProfil.aspx har en knap med download CV som gør følgende:
- Response.AddHeader("Refresh", "0.2;URL=ThanksForDownloading.aspx"); //Bruger ikke server.transfer for så vises siden ikke, men download startes direkte.
ThanksForDownloading.aspx
Der er placeret en statisk int som skal tælle om den er kommet igen af sig selv. Man kan ikke bruge isPostBack da dette ikke er brugerrespons og derfor ikke siger true.
- static int timesBeenHere = 0;
-
- if (timesBeenHere > 0)
- {
- Response.ContentType = "application/pdf";
- Response.AddHeader("Content-Disposition", "attachment; filename=LauritsW.pdf");
- //Response.AddHeader("Content-Disposition", "inline;filename=LauritsW.pdf");
-
- string thisDir = "/LauritsW.pdf"; //Server.MapPath(".");
- Response.TransmitFile(thisDir);
- }
- else
- Response.AddHeader("Refresh", "2;URL=ThanksForDownloading.aspx");
- timesBeenHere++;
Forløb:
PersonligProfil.aspx trykkes på DownloadKnap
Redirecter til ThanksForDownloading.aspx
Denne sætter en refresh efter 2 sekunder til sig selv, som sørger for at vise takke-siden, og så starter download som brugeren har bedt om.
Det underlige ved dette eksempel er at det virker ikke første gang, men når man får en retry-knap så virker det.
2 MÅDE:
ProfessionelProfil.aspx har en knap med download CV som gør følgende:
- Response.AddHeader("Refresh", "0;URL=Thanks2.aspx"); //Bruger ikke server.transfer for så vises siden ikke, men download startes direkte.
Thanks2.aspx
Page_Load
- string path = "/LauritsW.pdf";
- //Response.Redirect(path,);
- Response.Write("<script>");
- //Response.Write("window.open('Download2.aspx','_blank')");
- Response.Write("window.open('/LauritsW.pdf','_blank')");
- Response.Write("</script>");
Problemet med denne er at der kan den ikke vises i andet end browseren - altså ingen popup.
Den åbner filen direkte i et nyt vindue, og efter man har lukket det kan man se takke siden.
Jeg håber det er forståeligt og der er nogle derude der kan hjælpe mig
Indlæg senest redigeret d. 22.08.2011 14:36 af Bruger #16651