cyprysMedlem sedan dec. 20003 563 inlägg Jag har ett problem med att en sub körs en gång för mycket.
Jag har 2 st listboxar brevid varrandra.
När man ändrar värde i den första så fylls den andra på med en massa listitems beroende på vad man valde i den första.(FillUnderGenresClick()) Där är även autopostback = true och jag tror det är där felet ligger. Men om jag inte sätter det till true så kör den inte fyllningen av andra listboxen över huvud taget.
Hur som helst när jag sedan valt värde ur båda listboxarna och trycker på button1 så kör den tydligen samma sub igen ändå och fyller där på listbox2 igen så att inget värde kommer ur listbox2.
Detta kör ju igång min requiredfieldvalidator på listbox2.
Hur kör jag InsertBookInfo() utan att FillUnderGenresClick() körs ändå?
Presentationslagret
---------------------------------
<asp:ListBox
Runat="server"
ID="f_genre1"
DataTextField="col_headgenre"
DataValueField="ID"
SelectionMode="Single"
Rows="10"
Width="170"
OnSelectedIndexChanged="FillUnderGenresClick" AutoPostBack="True">
</asp:ListBox>
<asp:ListBox
Runat="server"
ID="f_genre2"
DataTextField="col_genre"
DataValueField="ID"
SelectionMode="Single"
Rows="10"
Width="170">
</asp:ListBox>
<asp:Button
ID="Button1"
Runat="server"
Text="Ladda upp"
Enabled="False"
OnClick="InsertBookInfo">
</asp:Button>
Code Behindlagret
---------------------------------
Sub InsertBookInfo(ByVal sender As Object, ByVal e As EventArgs)
Dim title As String = insert1(f_title.Text)
Dim info As String = insert1(f_info.Text)
Dim headgenre As String = f_genre1.SelectedItem.Value
Dim undergenre As String = f_genre2.SelectedItem.Value
Dim objBui As New BusinessL()
objBui.InserBook(title, info, headgenre, undergenre)
End Sub
Sub FillunderGenresClick(ByVal sender As Object, ByVal e As System.EventArgs)
Dim objbui As New BusinessL()
Dim ds As New DataSet()
ds = objbui.ShowGenres(f_genre1.SelectedItem.Value)
f_genre2.DataSource = ds
f_genre2.DataBind()
button1.Enabled = True
End Sub
NETworkMedlem sedan juni 20011 732 inlägg Hm, är du säker på att den kör båda funktionerna!? Prova att skriva ut något i FillunderGenresClick (släng in en response.write bara) för att verifiera att det verkligen är så, den ska naturligtvis inte köras när du trycker på knappen.
cyprysMedlem sedan dec. 20003 563 inlägg När jag trycker på button1 för att köra InsertBookInfo() så kommer aldrig datan från listbox2 med till den subben.
Samma info som fylls på genom FillunderGenresClick().
Och när den fylls på genom FillunderGenresClick() så sätts ingenting som markerat såklart vilket skapar ett fel.
Jag har verifierat att den körs även när man trycker på button1. Och jag gjorde det ytterligare en gång nu. Det är därför jag undrar om den där autopostback är det som spökar?
PMedlem sedan jan. 20012 204 inlägg Hmm har inte läst så noga men kan det ha något att göra med att datan "uppdateras".
lägg in denna kod:
If Not (IsPostBack)
BindGrid() ' Funktionen som binder datan!
End If
NETworkMedlem sedan juni 20011 732 inlägg Du har inte stängt av viewstaten?
En dålig lösning annars är ju att lägga en ifsats runt koden i InsertBookInfo och kolla om f_genre2 innehåller något, om den gör det hoppar du ur funktionen innan den kör någon kod där. Typ nåt sånt här (kan inte vb)
Sub FillunderGenresClick(ByVal sender As Object, ByVal e As EventArgs)
if(f_genre2.Items.Count>0)
return;
End Sub
cyprysMedlem sedan dec. 20003 563 inlägg Problemet med att lägga if-satser i bindningssubben är att det ska kunna köras även något redan är valt i listbox2.
Det ska ju uppdateras beroende på vad man valt i listbox1.
Samma sak gäller nästan page.ispostback.
Eftersom man kan välja ur listbox1 flera gånger, byt val d.v.s, så måste fyllningen kunna ske flera gånger.
Jag har hur som helst tänkt på båda lösningarna tidigare.
Problemet är helt enkelt varför FillunderGenresClick() kör överhuvudtaget när man trycker på knappen.
cyprysMedlem sedan dec. 20003 563 inlägg Har ännu inte lyckats lösa det.
Kan man inte kolla vad det är man trycker på för att posta om sidan?
Alltså om man trycker på knappen så sätter man en if-sats i fillundergenres() om att det inte ska köras.
Eller har nån kommit på varför den körs över huvud taget?