Avatar billede MrMagoo Nybegynder
02. december 2013 - 11:09 Der er 9 kommentarer og
1 løsning

Dropdown mister sin selectedValue efter Postback

Hej

Jeg har en dropdown som jeg i pageload fylder med data.

Herefter fylder jeg data i en repeater.

Er der tale om postback skaber jeg sql strengen dynamisk ud fra selectedValue i dropdown og databinder derefter til repeateren.

Min selectedValue er tom ved Postback men hvis jeg flytter min repeater databind ned under dropdown controllen virker det.

Dette er dog ikke en mulighed og helt sikkert ikke det rigtige.

Hvordan gøre det korrekt?
Avatar billede MrMagoo Nybegynder
02. december 2013 - 11:10 #1
Min dropdown:

<asp:DropDownList ID="Kategorier" runat="server" style="font-family:Pontano Sans;font-size:11px;"
AutoPostBack="True" DataTextField="Menunavn" DataValueField="Menunr">
    </asp:DropDownList>
02. december 2013 - 11:11 #2
Vi skal nok se hele din Page_Load for at kunne hjælpe.
Avatar billede MrMagoo Nybegynder
03. december 2013 - 08:41 #3
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
   
        If Not IsPostBack Then
            FillKategorier()
        End If
   
       
        Dim ConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings("SiteConnectionString").ConnectionString
        Dim Conn As New SqlConnection(ConnString)
        Conn.Open()
         
               
        Dim myCommand As SqlDataAdapter
        Dim strSql As String
       
        If IsPostBack Then
                     
               
            Dim VarKategori As String = Kategorier.SelectedValue
            Dim VarKategoriSQL As String
               
                 
            If VarKategori = "11900" Then
                VarKategoriSQL = "AND VareGrp = 11900 Or VareGrp = 12100 Or VareGrp = 12199"
            ElseIf VarKategori = "12000" Then
                VarKategoriSQL = "AND VareGrp = 12000 Or VareGrp = 12200 Or VareGrp = 12300 Or VareGrp = 12399"
            ElseIf VarKategori = "12400" Then
                VarKategoriSQL = "AND VareGrp = 12400 Or VareGrp = 12500"
            ElseIf VarKategori = "12900" Then
                VarKategoriSQL = "AND VareGrp = 12900"
            ElseIf VarKategori = "13000" Then
                VarKategoriSQL = "AND VareGrp = 13000"
            ElseIf VarKategori = "14000" Then
                VarKategoriSQL = "AND VareGrp = 14000"
            ElseIf VarKategori = "15000" Then
                VarKategoriSQL = "AND VareGrp = 15000"
            ElseIf VarKategori = "16000" Then
                VarKategoriSQL = "AND VareGrp = 16000"
            ElseIf VarKategori = "17000" Then
                VarKategoriSQL = "AND VareGrp = 17000"
            ElseIf VarKategori = "12301" Then
                VarKategoriSQL = "AND VareGrp = 12301"
            ElseIf VarKategori = "999999" Then
                VarKategoriSQL = ""
            Else
                VarKategoriSQL = ""
            End If
                 
         
           
            Dim VarAktuelle As String = Ugenstilbud.SelectedValue
            Dim VarAktuelleSQL As String
         
           
           
            If VarAktuelle = "Week1" Then
                VarAktuelleSQL = "AND (Stat = 'VF' OR Stat = 'V')"
            ElseIf VarAktuelle = "Week2" Then
                VarAktuelleSQL = "AND (Stat = 'LF' OR Stat = 'BF' OR Stat = 'FF' OR Stat = 'VF' OR Stat = 'TF' OR Stat = 'UF' OR Stat = 'B' OR Stat = 'L' OR Stat = 'F' OR Stat = 'V' OR Stat = 'T' OR Stat = 'U')"
            ElseIf VarAktuelle = "Week3" Then
                VarAktuelleSQL = "AND (Stat = 'UF' OR Stat = 'U')"
            ElseIf VarAktuelle = "Week4" Then
                VarAktuelleSQL = "AND (Stat = 'TF' OR Stat = 'T')"
            ElseIf VarAktuelle = "Week5" Then
                VarAktuelleSQL = "AND (Stat = 'BF' OR Stat = 'LF' OR Stat = 'FF' OR Stat = 'B' OR Stat = 'L' OR Stat = 'F')"
            Else
                VarAktuelleSQL = ""
            End If
           
         
               
            strSql = "SELECT * FROM bla_temp where Godkendt = 'J' " & VarKategoriSQL & " " & VarAktuelleSQL & " "
        Else
            strSql = "SELECT * FROM bla_temp where Godkendt = 'J'"
       
        End If
       
        myCommand = New SqlDataAdapter(strSql, Conn)
        Dim ds As DataSet = New DataSet()
        myCommand.Fill(ds)
       
       
            Panel1.Visible = True
            Panel2.Visible = False
            Repeater1.DataSource = ds
            Repeater1.DataBind()

      End Sub

Private Sub FillKategorier()
         
        Dim ConnString As String = System.Configuration.ConfigurationManager.ConnectionStrings("SiteConnectionString").ConnectionString
        Dim Conn As New SqlConnection(ConnString)
        Conn.Open()
       
        Dim myCommandKategori As SqlCommand
        myCommandKategori = New SqlCommand("SELECT * FROM", Conn)
        Dim modeladapter As SqlDataAdapter = New SqlDataAdapter(myCommandKategori)
               
        Dim dsmodel As DataSet = New DataSet()
        modeladapter.Fill(dsmodel)
        Kategorier.DataSource = dsmodel
        Kategorier.DataBind()
        Kategorier.Items.Insert(0, New ListItem("Vælg en produkt kategori", String.Empty))
        Kategorier.SelectedIndex = 0
        Conn.Close()
     
    End Sub
Avatar billede keysersoze Guru
03. december 2013 - 09:40 #4
Har du enabled viewstate?
Avatar billede MrMagoo Nybegynder
03. december 2013 - 09:46 #5
På dropdown controlleren?
Avatar billede MrMagoo Nybegynder
04. december 2013 - 08:02 #6
Jeg synes det er mærkeligt at det virker hvis jeg rykker min kode fra PageLoad ned under selve dropdown kontrollen. men ikke over.

Jeg har ændret min dropdown kontrol til:

<asp:DropDownList ID="Kategorier" runat="server" style="font-family:Pontano Sans;font-size:11px;"
AutoPostBack="True" DataTextField="Menunavn" DataValueField="Menunr" EnableViewState="true">
    </asp:DropDownList>
Avatar billede MrMagoo Nybegynder
04. december 2013 - 09:13 #7
På onselectedindexchanged virker det også hvis jeg udskriver
selectedvalue til skærmen...
Avatar billede keysersoze Guru
04. december 2013 - 09:42 #8
Hvis viewstate er disabled er din kontrol tom og så kendes værdien ikke før der igen er databundet - og er viewstate slået fra på et højere niveau end på kontrollen kan det være det ikke er nok at enable det på kontrollen.

onselectedindexchanged kører efter page_load og da du databinder her vil værdien være tilgængelig i efterfølgene events.

Et hurtigt alternativt fix kunne være at benytte Request.Form[dinkontrol.uniqueid] i stedet.
Avatar billede MrMagoo Nybegynder
04. december 2013 - 10:13 #9
Ja så virker det...

Har fixet en negativ konsekvens?

Jag har to dropdowns kan man tjekke den sidst ændrede og nulstille den anden efter postback?

Sidste spørgsmål...promise
Avatar billede keysersoze Guru
10. december 2013 - 22:57 #10
Den eneste reelle forskel er syntaks - men i min optik vil det selvfølgelig altid være interessant at finde ud af hvorfor noget ikke opfører sig som forventet og da vi ikke har fundet ud af det vil det være den negative konsekvens.

Hvis ingen af de to dropdowns laver postback men det sker fx i forbindelse med et click-event er du nødt til at håndtere "sidst ændrede" på klienten vha JavaScript og gemme fx kontrollens id i et hidden felt.
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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