Response.Redirect & Server.Transfer - Funktionieren nicht.

firendeath

AsP-ler
Hallo erstmal,

also ich bin seit längerem damit beschäftigt einen Fileuploader mit Progressbar zu programmieren.
Vor kurzem hab ich es dann endlich hinbekommen, doch sofort krieg ich ein neues Problem.
Wenn ich nach dem Event

ProgressBar1.RunTask

versuche einen Response.Redirect auf eine andere Seite auszuführen, bekomme ich gesagt das der Http-Header bereits abgeschickt wurde.
Daraufhin habe ich nach einer anderen Methode für die Weiterleitung gesucht und bin auf Server.Transfer
gestoßen, doch augenscheinlich reagiert er garnicht auf den Transfer...

Danach dachte ich mir es wäre vllt. einfacher, wenn ich die Weiterleitung über die Page_Load - Funktion und ein Postback mache.... Pustekuchen
1. Ich benötige eine Variable die in der ProgressBar1_RunTask - Methode generiert wird
2. Am Ende der ProgressBar1_RunTask - Methode wird garkein Postback ausgeführ und ich konnte keinen Hinweis darauf finden, wie ich serverseitig ein Postback einleite

Hier meine Lösungsansätze:

Code:
        protected void Page_Load(object sender, EventArgs e)
        {
            ProgressBar1.StartTaskButton = Button1.ID;
            ProgressBar1.RunTask += new EO.Web.ProgressTaskEventHandler(ProgressBar1_RunTask);
            if (!IsPostBack)
            {
                DropDownList1.SelectedIndex = 4;
            }
        }


        /// <summary>
        /// Zufällige Zeichenkette bestehend aus Buchstaben und Zahlen
        /// </summary>
        /// <param name="Length"></param>
        /// <returns></returns>
        static public string RandomString(Int64 Length)
        {
            System.Random rnd = new System.Random();
            StringBuilder Temp = new StringBuilder();
            for (Int64 i = 0; i < Length; i++)
            {
                if (rnd.Next(0, 2) == 1)
                    //Generiert einen Zufälligen Buchstaben
                    Temp.Append(Convert.ToChar(((byte)rnd.Next(26) + 65)).ToString());
                else
                    //Generiert eine Zufällige Zahl
                    Temp.Append(rnd.Next(0, 9).ToString());
            }
            return Temp.ToString();
        }



        /// <summary>
        /// Button1 Klick Event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void ProgressBar1_RunTask(object sender, EO.Web.ProgressTaskEventArgs e)
        {
            if (FileUpload1.FileName != null)
                if (FileUpload1.FileName != "")
                {
                    string s = "";
                    string fileN = FileUpload1.FileName;
                    string realName = fileN;
                    do
                        s = RandomString(25);
                    while (new System.IO.FileInfo(VS_FileUploader.Properties.Resources.path).Exists);


                    if (TextBox1.Text == "")
                    {
                        string re = fileN;
                        int i = 1;
                        do
                            if (new System.IO.FileInfo(VS_FileUploader.Properties.Resources.path + fileN).Exists | (fileN.Length) == 25)
                            {
                                fileN = re;
                                fileN = fileN + RandomString(i);
                                i++;
                            }
                        while (new System.IO.FileInfo(VS_FileUploader.Properties.Resources.path + fileN).Exists | (fileN.Length) == 25);
                    }
                    else
                    {
                        realName = TextBox1.Text;
                        string re = fileN;
                        int i = 1;
                        do
                            if (new System.IO.FileInfo(VS_FileUploader.Properties.Resources.path + fileN).Exists | (fileN.Length) == 25)
                            {
                                fileN = re;
                                fileN = fileN + RandomString(i);
                                i++;
                            }
                        while (new System.IO.FileInfo(VS_FileUploader.Properties.Resources.path + fileN).Exists | (fileN.Length) == 25);
                    }
                    bool einerSchritte = false;
                    FileStream fss = new FileStream(Path.Combine(VS_FileUploader.Properties.Resources.path, FileUpload1.FileName), FileMode.Create, FileAccess.Write);
                    BinaryWriter w = new BinaryWriter(fss);

                    if (FileUpload1.PostedFile.ContentLength <= 100)
                    {
                        einerSchritte = true;
                        ProgressBar1.Maximum = FileUpload1.PostedFile.ContentLength;
                    }

                    foreach (byte b in FileUpload1.FileBytes)
                    {
                        w.Write(b);

                        if (einerSchritte)
                            e.UpdateProgress(ProgressBar1.Value++);
                        else if (Convert.ToDouble(fss.Length) % Convert.ToDouble(FileUpload1.PostedFile.ContentLength / 100) == Convert.ToDouble(0))
                            e.UpdateProgress(ProgressBar1.Value++);
                        //EO.Web.ProgressTaskEventArgs f = ProgressBar1.
                    }
                    w.Flush();
                    w.Close();
                    fss.Dispose();
                    fss.Close();
                    System.IO.FileStream fs = new System.IO.FileStream(VS_FileUploader.Properties.Resources.path + s, System.IO.FileMode.Create, System.IO.FileAccess.Write);
                    System.IO.StreamWriter ww = new System.IO.StreamWriter(fs);
                    ww.WriteLine(VS_FileUploader.Properties.Resources.path + fileN);
                    ww.WriteLine(realName);
                    ww.WriteLine(DropDownList1.SelectedIndex + 1);
                    ww.Dispose();
                    ww.Close();
                    fs.Dispose();
                    fs.Close();


Server.Transfer("~/wait.aspx?" + s + "=");

                }
        }

Das Event ProgressBar1_RunTask wird beim Klick auf den Button1 ausgeführt.
Dann wird, wenn das FileUpload1 - Feld eine Datei enthält, eine Datei mit einem Kryptischen Namen erstellt über die später der Download geregelt wird.
Dann wird die Datei byte-weise ausgelesen und bei jedem File.Length / 100 tem Byte wird die ProgressBar.value um 1 erhöht.
Danach sollte er eig. den Redirect ausführen... macht er aber nicht.

Bin echt ratlos so langsam,
hoffe euch fällt was hierzu ein.

Liebe Grüße,
Firen
 
Zuletzt bearbeitet:
Hi

bist im falschen Forum hier. Es gibt auch einen NET Bereich hier bei Tutorials, da sitzen die Profies. :) Einfach einen Moderator anschreiben, der verschiebt Diich in die Schublade.

Mich wundert auch so manches und ich weiß aus ASP.NET Anfänger-Erfahrung, dass man sich oft den Wolf nach Lösungen sucht.

Hast Du mal überlegt, den Upload-Prozessbar-Prozess in eine Funktion(boolean) auszulagern mit Return true als Ergebnis, wenn alles stimmt.

Dieses Ergebnis im Buttonevent mit einer Abfrage generieren.
 
Warum erstellst du dir nicht ein UploadCompletedEvent, dass du wirst, wenn der Upload erledigt ist. Anschließend kannst du darin doch dein Server.Transfer aufrufen.
 
Weil ich nicht weiß wie das geht...
Gibt es nicht eine simple Lösung wie ich aus einer Funktion, also NACHDEM der http-header gesendet wurde, eine Weiterleitung ausführen kann ?
 
Sei jetzt nicht böse aber Google mit c# events zu befragen kostet nicht die Welt. Und um deine Frage noch zu beantworten - nein außer diesen beiden gibt es vom Framework her nichts fertiges.
 

Neue Beiträge

Zurück