Jag har ett formulär som användaren skall fylla i. I formuläret skall användaren kryssa i en eller flera kryssrutor i en CheckBoxList. Om så ej skett skall ett felmeddelande visas. Jag har följande kod:
private void Submit1_ServerClick(object sender, System.EventArgs e)
{
bool error = true;
int j = 0;
while (error && j<CheckBoxList1.Items.Count)
error = !CheckBoxList1.Items[j++].Selected;
if (error)
{
Label1.Text = "fel";
return;
}
... //Sätt in data
}
Det fungerar första gången användaren klickar på submit-knappen. Andra gången (oavsett om han nu har kryssat i någon kryssruta eller ej) går programmet ej in i Submit1_ServerClick. Varför?
Felmeddelandet står kvar andra gången. Om man andra gången hade kryssat i någon checkbox så försvinner dessa kryss, men felmeddelandet och även det som användaren angett i TextBoxarna står alltså kvar.
Felet beror på att en label behåller sina värden efter postbacks. Du sätter texten i labeln om ett fel uppstår till "fel", om du sedan andra gången kryssar i något så måste du tömma texten i din label annars kommer texten "fel" att finnas kvar.
Det låter däremot konstigt att eventuella kryss i din checkboxlist skulle försvinna, precis som med labeln så kommer den ihåg sina värden över postbacks med hjälp av viewstate.
Nej, det löser inte problemet. Formen submittas ändå inte.
Jag har aldrig varit med om något märkligare: Om jag väntar ett tag och därefter kryssar i en kryssruta och och klickar på submit så fungerar det. Men det fungerar alltså inte om jag gör det direkt efter.