Avatar billede basementjack Nybegynder
10. november 2004 - 00:03 Der er 8 kommentarer og
1 løsning

Værdi fra DropDownList

Nogen der ved hvorfor værdi fra DropDownList i dette eksempel altid giver 2....

aspx____________________________________
<%@ Page Language="vb" Inherits="bum" Src="ddl.vb" Trace="true" %>
<html>
<head>
</head>
<body>
    <form id="enform" runat="server">
        <asp:placeholder id="placehold" runat="server"></asp:placeholder><br>
    </form>
</body>
</html>

vb______________________________________
Imports System
Imports System.Collections
Imports System.Web
Imports system.Web.UI.Webcontrols
Imports system.Web.UI.Htmlcontrols

Public Class bum: Inherits System.Web.UI.Page
    Public ddl As DropDownList
    Public placehold As PlaceHolder
    Public Sub Page_Load
        ddl = New DropDownList
        Dim ar As New ArrayList
        ar.Add("2")
        ar.Add("4")
        ddl.DataSource = ar
        ddl.DataBind()
        ddl.AutoPostBack = true
        placehold.controls.add(ddl)
        Trace.write(ddl.SelectedItem.Value.ToString())
    End Sub
End Class
Avatar billede basementjack Nybegynder
10. november 2004 - 00:21 #1
Nåmen.. Natter.. :P
Avatar billede mccannon Nybegynder
10. november 2004 - 04:40 #2
yep
fordi du siger new til din dropdownliste i page load...så husker den ikke viewstate på den.

Altså, viewstate køre før page load, og hvis kontrollen ikke er oprettet på det tidspunkt hvor viewstate køre, så bliver asp.net enig med sig selv om at du sikkert ikke har brug for den mere og smider den tidligere værdi ud.

Men hvis du siger new til din dropdownlist på init tidspunktet, er det en anden sag, fordi init køre FØR viewstate :)
og så findes kontrollen jo når viewstate køre, og derfor husker asp.net den tidligere værdi.

/Mc
Avatar billede snepnet Nybegynder
10. november 2004 - 08:42 #3
Hvis du tilføjer kontrollen i Page_Load kan du også bare "vente lidt" med at spørge på værdien....

Prøv den her :

Imports System
Imports System.Collections
Imports System.Web
Imports System.Web.UI.Webcontrols
Imports System.Web.UI.Htmlcontrols

Public Class bum : Inherits System.Web.UI.Page
    Public WithEvents ddl As DropDownList
    Protected Form1 As HtmlForm
    Public Sub Page_Load()
        ddl = New DropDownList
        Dim ar As New ArrayList
        ar.Add("2")
        ar.Add("4")
        ddl.DataSource = ar
        ddl.DataBind()
        ddl.AutoPostBack = True
        AddHandler ddl.SelectedIndexChanged, AddressOf ddl_SelectedIndexChanged
        Form1.Controls.Add(ddl)       
        Response.Write("I Page_Load : " + ddl.SelectedItem.Text)
    End Sub
    Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
        Response.Write("<br>I OnPreRender : " + ddl.SelectedItem.Text)
    End Sub
    Private Sub ddl_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Response.Write("<br>I en EventHandler : " + ddl.SelectedItem.Text)
    End Sub

    Private Sub InitializeComponent()

    End Sub
End Class

Du vil kunne spørge på  værdien i en given eventhandler (også dens egne), eller i f.eks. PreRender fasen.

Mvh
Avatar billede basementjack Nybegynder
10. november 2004 - 09:40 #4
Der er samme problem med
vb________________________________
Imports System
Imports System.Collections
Imports System.Web
Imports system.Web.UI.Webcontrols
Imports system.Web.UI.Htmlcontrols

Public Class bum: Inherits System.Web.UI.Page
    Public ddl As DropDownList
    Public placehold As PlaceHolder
    Public Sub Page_Init
        ddl = New DropDownList
    End Sub
    Public Sub Page_Load
        Dim ar As New ArrayList
        ar.Add("2")
        ar.Add("4")
        ddl.DataSource = ar
        ddl.DataBind()
        ddl.AutoPostBack = true
        placehold.controls.add(ddl)
        Trace.write(ddl.SelectedItem.Value.ToString())
    End Sub
End Class
Avatar billede basementjack Nybegynder
10. november 2004 - 09:43 #5
snepnets giver tilgengæld:
I Page_Load : 2
I en EventHandler : 4
I OnPreRender : 4

vb___________________________________
Imports System
Imports System.Collections
Imports System.Web
Imports System.Web.UI.Webcontrols
Imports System.Web.UI.Htmlcontrols

Public Class bum : Inherits System.Web.UI.Page
    Public WithEvents ddl As DropDownList
    Protected enform As HtmlForm
    Public Sub Page_Load()
        ddl = New DropDownList
        Dim ar As New ArrayList
        ar.Add("2")
        ar.Add("4")
        ddl.DataSource = ar
        ddl.DataBind()
        ddl.AutoPostBack = True
        AddHandler ddl.SelectedIndexChanged, AddressOf ddl_SelectedIndexChanged
        enform.Controls.Add(ddl)       
        Response.Write("I Page_Load : " + ddl.SelectedItem.Text)
    End Sub
    Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
        Response.Write("<br>I OnPreRender : " + ddl.SelectedItem.Text)
    End Sub
    Private Sub ddl_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Response.Write("<br>I en EventHandler : " + ddl.SelectedItem.Text)
    End Sub

    Private Sub InitializeComponent()

    End Sub
End Class

-  - Hvorfor virker det ikke med Page_Init?
Avatar billede basementjack Nybegynder
10. november 2004 - 16:04 #6
Okay... Det viser sig at jeg ikke bare liiige kan bruge det med OnPreRender eller SelectedIndexChanged... Jeg skal bruge værdien fra DropDownListen i min Page_Load...
I denne kode bliver min str ved med at være tom i min Page_Load...

vb__________________________
Imports System
Imports System.Collections
Imports System.Web
Imports System.Web.UI.Webcontrols
Imports System.Web.UI.Htmlcontrols

Public Class bum : Inherits System.Web.UI.Page
    Public WithEvents ddl As DropDownList
    Public placehold As PlaceHolder
    Public str As String
    Public Sub Page_Load()
        ddl = New DropDownList
        Dim ar As New ArrayList
        ar.Add("2")
        ar.Add("4")
        ddl.DataSource = ar
        ddl.DataBind()
        ddl.AutoPostBack = True
        AddHandler ddl.SelectedIndexChanged, AddressOf ddl_SelectedIndexChanged
        placehold.Controls.Add(ddl)     
        Trace.Write("Selected : " + ddl.SelectedItem.Text)
        Trace.Write("Pub str " & str)
    End Sub
    Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
        str = ddl.SelectedItem.Text
        Trace.Write("preRender " & str)
    End Sub
    Private Sub ddl_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        str = ddl.SelectedItem.Text
        Trace.Write("Changed " & str)
    End Sub

    Private Sub InitializeComponent()

    End Sub
End Class
Avatar billede snepnet Nybegynder
10. november 2004 - 20:16 #7
så skal du sætte den ind inden (i OnInit)...

Imports System
Imports System.Collections
Imports System.Web
Imports System.Web.UI.Webcontrols
Imports System.Web.UI.Htmlcontrols

Public Class bum : Inherits System.Web.UI.Page
    Public WithEvents ddl As DropDownList
    Protected Form1 As HtmlForm
    Public Sub Page_Load()
        Response.Write("I Page_Load : " + ddl.SelectedItem.Text)
    End Sub
    Protected Overrides Sub OnInit(ByVal e As EventArgs)
        ddl = New DropDownList
        Dim ar As New ArrayList
        ar.Add("2")
        ar.Add("4")
        ddl.DataSource = ar
        ddl.DataBind()
        ddl.AutoPostBack = True
        AddHandler ddl.SelectedIndexChanged, AddressOf ddl_SelectedIndexChanged
        Form1.Controls.Add(ddl)
    End Sub
    Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
        Response.Write("<br>I OnPreRender : " + ddl.SelectedItem.Text)
    End Sub
    Private Sub ddl_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Response.Write("<br>I en EventHandler : " + ddl.SelectedItem.Text)
    End Sub

    Private Sub InitializeComponent()

    End Sub
End Class

mvh
Avatar billede basementjack Nybegynder
13. november 2004 - 20:44 #8
Ehm.. Tak... Jeg valgte bare at have en button-event som aflæser værdien og bruger, og det fik jeg til at virke..
Men læg et svar, så giver jeg point..
Avatar billede snepnet Nybegynder
13. november 2004 - 21:33 #9
ok så :o)
/snep
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester