Gå til innhold

Dropdown selectedindex resettes etter postback


Anbefalte innlegg

Jeg plages veldig med en dropdownliste jeg håper noen kanskje vet løsningen på.

 

Problemet er at jeg har to listbox - dropdownlister, en hovedkategori og en underkategori:

 

På overkategorien har jeg autopostback=true, og en event som kalles når det er gjort en endring her. Denne eventen kaller en metode som fyller underkategori listen på bakgrunn av hva som er valgt i den første listen.

 

Problemet er at når jeg skal lagre det som er valgt i den andre listen får jeg alltid selectedindex = 1. Det virker som at uansett hva jeg gjør så bindes den andre dropdownlisten når jeg klikker lagre, noe som gjør at jeg ikke får med meg rett verdi. Altså lstSubCategoryExperience.SelectedItem.Text viser alltid det første elementet i listen

 

Jeg forsøkte å ha en autopostback=true på den underkategori - dropdownlisten også, men det resulterte at når jeg gjorde et valg i denne boksen så nullstilles listen til å velge det øverste elementet.

 

Jeg kan ikke se hvordan jeg skal hente ut rett verdi. Det ser ut til at den andre dropdownlisten bindes på nytt hver gang og dermed mister verdien som er valgt.

 

Jeg legger ved den relevante koden så dere ser hva jeg sliter med.

 

I aspx siden har jeg AutoEventWireup="false", mens de to dropdownboxene har AutoPostBack="True".

 

Innspill her hadde vært fantastisk, begynner å se meg blind.

 

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load

  If Not Page.IsPostBack Then
           GetMainResearchData()
           GetSubResearchData(0)
           lstMainCategory.Items.Insert(0, New ListItem("Please Select
Main Category", "None"))
           lstMainCategory.SelectedIndex = 0
  End If
End Sub

Private Sub lstMainCategory_SelectedIndexChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
lstMainCategory.SelectedIndexChanged
       mainKey = lstMainCategory.SelectedIndex()
       GetSubResearchData(mainKey)
   End Sub

Private Sub lstSubCategory_SelectedIndexChanged(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles
lstSubCategory.SelectedIndexChanged
   subKey = lstSubCategory.SelectedIndex() ' HER ER VERDIEN ALLTID 1!
   Session("subid") = subKey
End Sub


Private Sub GetMainResearchData()
       Dim sqlText As String = "SELECT main_category_key,
main_category_title FROM ntnu_main_category ORDER BY
main_category_title"
       Dim myCommand As SqlCommand = New SqlCommand(sqlText,
myConnection)

       Try
           myConnection.Open()
           myDataReader = 
myCommand.ExecuteReader(CommandBehavior.CloseConnection)
           lstMainCategory.DataSource = myDataReader
           lstMainCategory.DataBind()

       Catch myException As Exception
           Response.Write("Feilmelding " & myException.ToString())
       Finally
           If Not myDataReader Is Nothing Then
               myDataReader.Close()
               myConnection.Close()
           End If
       End Try
   End Sub

   Private Sub GetSubResearchData(ByVal mainCategory As Integer)

       Dim sqlText As String = "SELECT sub_category_key,
sub_category_title FROM ntnu_sub_category WHERE
ntnu_sub_category.sub_category_key = " & mainCategory & ""
       Dim myCommand As SqlCommand = New SqlCommand(sqlText,
myConnection)
       Try
           myConnection.Open()
           myDataReader =
myCommand.ExecuteReader(CommandBehavior.CloseConnection)
           lstSubCategory.DataSource = myDataReader
           lstSubCategory.DataBind()
           lstSubCategory.Items.Insert(0, New ListItem("Please Select
sub category", "None"))
           lstSubCategory.SelectedIndex = 0

       Catch myException As Exception
           Response.Write("Feilmelding " & myException.ToString())
       Finally
           If Not myDataReader Is Nothing Then
               myDataReader.Close()
               myConnection.Close()
           End If
       End Try
   End Sub

Lenke til kommentar
Videoannonse
Annonse

Uten å ha testet ville jeg gjettet på at btnLagre_Click faktisk kjører FØR ddlSubCat_SelectedIndexChanged...

 

prøv en rask fix:

 

dim Save_Later as boolean = false

function btnLagre_click...

Save_Later = true

end function

 

function page_onprerender...

if Save_Later = false return

 

' Lagre ting her...?

end function

Lenke til kommentar

Hmmm, skjønner ikke dette helt... Dersom du har AutoPostBack = False på sub-listen din vil SelectedIndexChanged-eventet bli kjørt FØR et Click-eventet på lagre-knappen. Derfor er det egentlig likegyldig (i dette enkle eksempelet) om du bruker AutoPostBack på sub-listen din eller ikke. På main-listen bør du jo selvsagt ha det.

 

Skjønner heller ikke hvorfor den første listen din ble resatt da du brukte AutoPostBack på sub-listen din. Du har vel satt EnableViewState = True (default)?

 

Bruker du session-variabelen til noe (Session("subid"))? Kanskje den ødelegger for deg?

 

Øyvind

Lenke til kommentar

Takk for svar:)

 

Skjønner heller ikke hvorfor den første listen din ble resatt da du brukte AutoPostBack på sub-listen din. Du har vel satt EnableViewState = True (default)?

 

Den første listen resettes ikke etter postback. Kun den andre.

 

Det jeg bruker sessions til var for å prøve manuelt å sette selectedIndex etter at den andre listen var gjort et valg på og det var gjort en postback.

 

Jeg bruker ViewStateEnabled = "True" både på kontrollene det gjelder samt i Page direktivet.

 

Skjønner ikke hva som kan skje her, selectedIndex resettes hele tiden til -1 som er ganske frustrerende.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...