[ASP.NET] Button.Click te laat uitgevoerd

Pagina: 1
Acties:

  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 15-05 12:18
Beste mensen na een dag te zitten klooien ben ik het zicht door dat bos met die vele boompjes kwijtgeraakt.

Situatie
Heb een simpele website, met een form. Wanneer ik op de button btnSubmit klik, moet hij wat gegevens uit het form trekken welke ik bovenaan heb gedefineerd (tekst boxjes en twee dropdownlist's).

Het probleem
Ik heb met de debugger het een en ander zitten bekijken en het blijkt dus wanneer ik op btnSubmit klikt, hij eerst Page_load nog een keer gaat doorlopen en dan pas bij btnSubmit.click komt. Dit is dus te laat, schijnbaar (omdat de page al gereload is?) zijn alle velden weer leeg, en krijg ik dus een exception/null waardes uit in me variabelen.

De code
helpdesk.aspx.vb
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Sub Page_Load(ByVal Src As Object, ByVal E As EventArgs) Handles Me.Load
' indien er dus afgemeld is (of totaal niet is aangemeld) word er automatisch een
' redirect uitgevoerd naar de login pagina.
' dit stukje code dient dus ook bij elke "module" geplaatst te worden.
 Try
   If Len(Session("cdrelatie")) = 0 Or Len(Session("cdcontact")) = 0 Then
     Response.Redirect("login.aspx")
   Else
   End If
 Catch
 End Try
End Sub

 Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs)
  Dim test As String
  test = CStr(ddlNCcategorie.SelectedValue)
 End Sub

helpdesk.aspx
code:
1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
<title>title</title>
</head>

<body topmargin="0" leftmargin="0" link="#000000"  vlink="#000000">
<form id="frmNieuweCall" runat="server">
<asp:DropDownList Runat="server" ID="ddlNCcategorie">
</asp:DropDownList><br>
<asp:DropDownList Runat="server" ID="ddlNCmwgroepen">
</asp:DropDownList><br>
<asp:Button ID="btnSubmit" Text="Call Aanmaken"  runat="server" OnClick="btnSubmit_Click" />


Mij is het spoor niet duidelijk meer, kan iemand dit helpen op te lossen ?

Notitie: Maak gebruik van Visual Studio 2005 Web Developer op de .NET 2.0 BETA Framework.
Edit: Er staan in het officiele html bestand natuurlijk wel items in de dropdownlist's. Om dit een beetje kort te houden, heb ik die er nu even uitgeknipt.

[ Voor 34% gewijzigd door MikevanEngelen op 14-12-2004 13:19 . Reden: Toevoeging ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:45

gorgi_19

Kruimeltjes zijn weer op :9

If Not Page.IsPostback Then

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • 6K
  • Registratie: September 2002
  • Laatst online: 19-01-2025

6K

is ook zo...

hey gorgi_19, das de tweede keer deze week :p

inderdaad page load alleen eerste keer uitvoeren, na een postback dus overslaan en je hebt je waardes nog.

٩(͡๏̯͡๏)۶ ٩(●̮̮̃•̃)۶


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:45

gorgi_19

Kruimeltjes zijn weer op :9

Idd :P

MikevanEngelen, als je toch met ASP.Net aan de gang gaat, leer je dan gelijk alle VB6 / VBScript methodieken zoals Len, CStr en de oude method van inloggen af met de response.redirect. Tegenhangers zijn de properties .Length, .ToString en Forms Authentication.

Verder zie ik het nut in in van een Try-Catch, waarbij het enige doel is om fouten te negeren. Die komen er niet voor niets.

Hetzelfde geldt voor een stukje code, welke je 'verplicht' om in elke module te plaatsen. Dan maak je er een abstract class van, waarvan je de modules laat inheriten. Forms Authentication regelt dit echter zelf voor je.

[ Voor 43% gewijzigd door gorgi_19 op 14-12-2004 13:47 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 15-05 12:18
Ik heb gekeken waar ik dit kan toepassen, maar het is mij niet volledig duidelijk wanneer dit moet plaatsvinden.
Wanneer ik dit doe, voor het vullen van de "dropdownlist"s zijn deze leeg (en de variabelen dus ook die hij moet vullen dmv dat ddl.selectedvalue.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:45

gorgi_19

Kruimeltjes zijn weer op :9

MikevanEngelen schreef op dinsdag 14 december 2004 @ 14:06:
[...]


Ik heb gekeken waar ik dit kan toepassen, maar het is mij niet volledig duidelijk wanneer dit moet plaatsvinden.
Wanneer ik dit doe, voor het vullen van de "dropdownlist"s zijn deze leeg (en de variabelen dus ook die hij moet vullen dmv dat ddl.selectedvalue.
Zie Google met zoekwoorden

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 15-05 12:18
gorgi_19 schreef op dinsdag 14 december 2004 @ 13:43:
Idd :P

MikevanEngelen, als je toch met ASP.Net aan de gang gaat, leer je dan gelijk alle VB6 / VBScript methodieken zoals Len, CStr en de oude method van inloggen af met de response.redirect. Tegenhangers zijn de properties .Length, .ToString en Forms Authentication.

Verder zie ik het nut in in van een Try-Catch, waarbij het enige doel is om fouten te negeren. Die komen er niet voor niets.

Hetzelfde geldt voor een stukje code, welke je 'verplicht' om in elke module te plaatsen. Dan maak je er een abstract class van, waarvan je de modules laat inheriten. Forms Authentication regelt dit echter zelf voor je.
Ik wist niet dat het uit VB6/VBScript komt want beide heb ik geen ervaring mee :)
Ik zal snel eens kijken hoe dat werkt met ToString, echter naar dat Forms Authentication heb ik een keer naar gekeken maar dit was mij niet volledig duidelijk.

De Try-Catch had ik voor dit voorbeeld beter weg kunnen houden, alleen normaal gesproken staat daar veel meer code die de error afhandeling duidelijk maakt. Maar om de post zo kort (en klein) mogelijk te houden had ik dat er tussenuit geknipt.

Dat met die modules heb ik ook al een keer geprobeerd, je slaat de 'shared' propertys op in een asac page, en je gebruikt bovenin iets met Inhertits="page.asac" verder waar je de user control nodig hebt die code om dat te activeren. De reden dat ik dat -niet- gebruikte weet ik niet, volgens mij dat het op dat moment niet lekker werkte, heb ik besloten het op die manier te doen (aangezien die website toch wel overzichtelijk blijft is dat in dit geval geen ramp).

Toch blijf ik 't raar vinden dat hij gewoon de boel _tijdens_ de post leeggooit :S

  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 15-05 12:18
Ik heb hier het een en ander zitten bekijken, maar hier wordt uitgegaan van databinding, dat is dus niet hoe ik met deze dropdownlists werkt.
Ik vul op de volgende manier de dropdownlists:

VB CODE
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    Function f_dbint2catNC() As Boolean
        Try
            If Not dbOpen() Then
                dbClose()
                Response.Write("Database openen mislukt !")
                Return False
            Else
                dbDA_int2cat.SelectCommand = New ByteFX.Data.MySqlClient.MySqlCommand("SELECT *" & _
" FROM tbl_helpdesk_categorie", dbcon)
                dbDA_int2cat.Fill(dbDS_int2cat, "dsInt2Cat")
                dbClose()
                Return True
            End If
        Catch ex As Exception
            System.Diagnostics.Debug.WriteLine(ex.Message)
            dbClose()
        End Try
    End Function

    Sub ddlNCmwgroepen_Vullen()
        dbDS_int2naam.Clear()

        Try
            If Not f_dbint2naamNC() Then
                Response.Write("Laden van Medewerkersgroepen mislukt")
            End If

            Dim dbRecord As Data.DataRow
            Dim dbCount, dbAantal As Integer
            Dim i As Integer
            Dim intGroepnr As Integer
            Dim strGroepnaam As String

            dbAantal = dbDS_int2naam.Tables("dsInt2Naam").Rows.Count - 1

            For i = 0 To dbAantal
                dbRecord = dbDS_int2naam.Tables("dsInt2Naam").Rows.Item(dbCount)
                intGroepnr = CInt(dbRecord("groepnr"))
                strGroepnaam = CStr(dbRecord("omschrijving"))
                ' Response.Write("<option value='" & intGroepnr & "'>" & strGroepnaam & "</option>")
                ddlNCmwgroepen.Items.Add(strGroepnaam)
                If Not dbAantal = dbCount Then
                    dbCount = dbCount + 1
                End If
            Next i
        Catch ex As Exception
            Response.Write(ex.Message)
        End Try
    End Sub


HTML
code:
1
&nbsp;&nbsp;<% ddlNCcategorie_Vullen %><asp:DropDownList Runat="server" ID="ddlNCcategorie"></asp:DropDownList>

[ Voor 7% gewijzigd door MikevanEngelen op 14-12-2004 14:43 ]


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:16
Sorry maar je bent nu niet goed bezig:
code:
1
<% ddlNCcategorie_Vullen %><asp:DropDownList Runat="server" ID="ddlNCcategorie"></asp:DropDownList>
Dit lijkt meer op classic asp dan op .net. Kijk eens naar databinding, of kijk eens naar de asp.net quickstart waarin dit soort dingen veelvuldig en simpel uitgelegd wordt.

Edit: vooruit dan, linkje erbij.

[ Voor 20% gewijzigd door sig69 op 14-12-2004 14:54 ]

Roomba E5 te koop


  • MikevanEngelen
  • Registratie: Mei 2001
  • Laatst online: 15-05 12:18
sig69 schreef op dinsdag 14 december 2004 @ 14:52:
Sorry maar je bent nu niet goed bezig:
code:
1
<% ddlNCcategorie_Vullen %><asp:DropDownList Runat="server" ID="ddlNCcategorie"></asp:DropDownList>
Dit lijkt meer op classic asp dan op .net. Kijk eens naar databinding, of kijk eens naar de asp.net quickstart waarin dit soort dingen veelvuldig en simpel uitgelegd wordt.

Edit: vooruit dan, linkje erbij.
Een dikke kus :)

In ieder geval: Het werkt nu, de trick was inderdaad gebruik maken van databinding, deze opnemen in de load en de eerder genoemde code ( If Not IsPostBack Then) gebruiken.

In ieder geval allen bedankt voor het antwoorden.
Pagina: 1