webForumDet fria alternativet

Submit fungerar bara en gång?

.NET

11 svar · 213 visningar · startad av kristoffer

Medlem sedan juni 20001 257 inlägg
Frågan#1

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?

Medlem sedan mars 200262 inlägg
#2

Har du code-behind kan du inte sätta metoden till private

Medlem sedan juni 20001 257 inlägg
#3

Öh, det fungerar ju första gången? Du menar alltså Submit1_ServerClick?

Medlem sedan mars 200262 inlägg
#4

protected void skall det stå ja
Kolla om det funkar. Jag vet inte annars vad som kan vara fel...

Medlem sedan juni 20001 257 inlägg
#5

Fungerar inte. Verkar inte troligt heller.

Medlem sedan mars 200262 inlägg
#6

Den kommer ju alltid skriva ut fel om du inte sätter den labeln någon annanstans eller att den glömmer sin "viewstate"

else{
Label1.Text="inte fel";
}

Medlem sedan juni 20001 257 inlägg
#7

Jag har ju bara

<asp:Label id="Label1" runat="server" ForeColor="Red"></asp:Label>

Alltså ingen text om inte fel.

Medlem sedan mars 200262 inlägg
#8

Ja, men vad händer andra gången?

Skriver den ut: fel
eller skriver den ut ingenting

Medlem sedan juni 20001 257 inlägg
#9

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.

Medlem sedan juni 20011 732 inlägg
#10

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.

if (error)
{
Label1.Text = "fel";
return;
}
else {
Label1.Text = "";
}

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.

Medlem sedan juni 20001 257 inlägg
#11

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.

Medlem sedan juni 20001 257 inlägg
#12

Nu har jag löst det:

Kan det bero på att jag har:

<%@ OutputCache Duration="60" varybyparam="id" varybycustom="LanguageChoice" %>

längst upp på aspx-sidan?

Jag löste det i alla fall genom att lägga till

buffer="False"

i

<%@ Page language="c#" Codebehind="foo.aspx.cs" AutoEventWireup="false" Inherits="bar.foo" %>
260 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)