Viacnásobné vykonanie udalosti v Page_Load   zodpovězená otázka

ASP.NET WebForms

Zdravím Vás.

Mám v Page_Load udalosť, ktorá odchytí cez Request.QueryString mnou zaslaný názov emailu a na tento email odošle správu. Problém je v tom že tú správu mi odošle 2x po sebe. Pokiaľ email natvrdo zadefinujem v udalosti a nepoužijem Request.QueryString tak je to OK. No ak email zadám stránke odkazom, ako keby sa Page_Load vykonala 2x po sebe. Neviem z toho von.

Toto je OK

Dim strEmail As String = "[email protected]"
        Dim html As String = String.Empty

        Using sr As New System.IO.StreamReader(Server.MapPath("~/Files/Info.txt"))
            html = sr.ReadToEnd() ' prečíta soubor
        End Using
        OdoslanieEmailuHTML(strEmail, "Click button", html, "Admin automatika") 'Toto je moja procedúra na odosielanie

Toto pošle email 2x ak vyvolám stránku a zadám je cez Request.QueryString email

Dim strEmail As String = Request.QueryString("email")
            Dim html As String = String.Empty

            Using sr As New System.IO.StreamReader(Server.MapPath("~/Files/Info.txt"))
                html = sr.ReadToEnd() ' prečíta soubor
            End Using
            OdoslanieEmailuHTML(strEmail, "Info", html, "Admin")'Toto je moja procedúra na odosielanie

Vopred dík za nasmerovanie

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jaký framework používáte?Nejlepší by bylo si to odkrokovat v debug módu a pak byste viděl co se děje přesně.Nicméně jsem teď zkoušel stejné řešení(v .net 4) a vše mi funguje korektně.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Používam NF 3.5; VS-2008.

Tak som to odkrokoval a pri kiknutí na odkaz napr.

http://localhost:51942/Info.aspx?email=e...@gmail.com (robí to ja na serveri)

sa vykoná Page_Load 1x - odošle email, potom začne zobrazovať stránku

(nezobrazí, len otvorí prehliadač) a sa vykoná Page_Load 2x odošle email znovu, potom korektne zobrazí stránku.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Skúšal som cez ViewState predávať formulári inštrukcie, koľký krát sa Page_Load načítavá no potom som si uvedomil, že to spúšťa 2 instancie formu takže ViewState("niečo") bolo vždy druhý krát nothing, aj keď som tam pri prvom Page_Load niečo vložil.

Nakoniec som to vyriešil týmto, uznávam že trochu prasáckym spôsobom, no už neviem ako by som sa z toho vymotal

If Request.QueryString("Email") Is Nothing Then
            'Ak nie je definovaný e-mail nevykoná nič
        Else
            Dim strEmailQS As String = Request.QueryString("Email") 'načíta z qerty
            Dim strEmail As String = NacitatIni("Email", strEmailQS, "0", 100, Server.MapPath(strCestaIni & "EmInfo.ini")) 'moja funkcia

            If strEmail = 0 Then 'Ak ešte nebol odoslaný
                Dim html As String = String.Empty
                Using sr As New System.IO.StreamReader(Server.MapPath("~/Files/Info.txt"))
                    html = sr.ReadToEnd() ' prečíta soubor
                End Using
                OdoslanieEmailuHTML(strEmailQS, "Info o produkte", html, "Admin") 'moja funkcia
                UlozitIni("Email", strEmailQS, "1", Server.MapPath(strCestaIni & "EmInfo.ini")) 'moja funkcia
            Else 'ak už bol odoslaný neodošle ale povolí budúce odoslanie 
                UlozitIni("Email", strEmailQS, "0", Server.MapPath(strCestaIni & "EmInfo.ini")) 'moja funkcia
            End If
        End If

Aj tak by som poprosil ak by niekto vedel prečo mi to hádže instancie 2 formov o radu "Prečo?"

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback