webForumDet fria alternativet

Rensa formulär

.NET

3 svar · 415 visningar · startad av speedy

Medlem sedan dec. 200283 inlägg
Frågan#1

Jag har en söksida där sökkontrollerna skrivs ut dynamiskt beroende på vilken kategori man valt at söka på (dropdownmeny högst upp på sidan). Kontrollerna deklareras som objekt i codebehindfilen och läggs till i en panel för att kunna användas i gränssittet. Detta funkar i princip bra men det finns en bugg som jag inte lyckas få bort.

Av någon anledning så ligger värdena kvar i kontrollerna när man skriver i något men sedan byter kategori utan att söka. Jag har trotts många försök inte lyckats bli av med detta och är något konfunderad över varför det blir såhär. (En tanke är att det buggar för att kontrollernas ID heter likadant även om man byter kategori)

Jag har bl.a. testat att ta bort Viewstate på kontrollerna men inget hjälper.

aspx-fil:

<form id="frmSearch" name="frmSearch" runat="server">
	<asp:DropDownList ID="ddlCategory" Runat="server" CssClass="menu" AutoPostBack="True"></asp:DropDownList>
	<br>
	<!-- sökkontrollerna läggs till programmatiskt i codebehindfilen -->
	<asp:PlaceHolder ID="plhSearch" Runat="server" EnableViewState="False"></asp:PlaceHolder>
	<br>
	<img src="images/pixel.gif" height="10"><br>
	<asp:Button ID="btnSearch" Runat="server" CssClass="btn" Text="Sök" OnClick="Search"></asp:Button>
	&nbsp;
	<asp:Button ID="btnViewAll" Runat="server" CssClass="btn" Text="Visa alla" OnClick="viewAll"></asp:Button>
	&nbsp;
	<asp:Label id="lblMessage" Runat="Server" CssClass="error"></asp:Label>
	<br><br><br>
	<asp:placeholder ID="plhResult" Runat="server"></asp:placeholder>
</form>

exempel på hur det ser ut i codebehind:

// denna kod ligger inom en for-loop

TextBox objTxtAttr = new TextBox();			
objTxtAttr.ID = "txtAttr" + i;		
objTxtAttr.CssClass = "TextField";	
plhSearch.Controls.Add(objTxtAttr);

arrControls.Add(objTxtAttr);	//sparar en referens till kontrollen

Har ni några förslag ?

Medlem sedan nov. 2003569 inlägg
#2

Men kan du inte rensa värdena manuellt då? ,
TextBox.Text=null;
DropDownList.Items.Clear();

typ.

Medlem sedan dec. 200283 inlägg
#3

Ja jag har testat både TextBox.Text=null; och TextBox.Text="";.

Just nu körs funktionen för att skriva ut kontrollerna inom ett if(IsPostBack) i page_load. Jag vill ju ha den där eftersom funktionen ska köras så fort man sökt på någonting också.

Om jag anropar funktionen ifrån OnSelectedIndexChanged i min .aspx istället så rensas dock fälten som dom ska! :o Detta gör bland annat att sökfunktionen inte fungerar så det är inte någon bra lösning...

Men min fråga är: Hur kan det vara någon skillnad på när funktionen anropas från min aspx-fil med OnSelectedIndexChanged jämfört med mitt andra sätt med anrop från page load? Borde inte resultatet bli detsamma?

Medlem sedan nov. 2003569 inlägg
#4

Du, välkommen till dynamiska kontroller :)
Tycker jag känner igen ditt problem, det spelar stor roll på var man lägger kontrollerna, i Page_Load eller i någon funktion.

vid postback:
ViewState funkar i Page_Load när du har dynamiska kontroller, men ViewState funkar inte om du skapar kontrollerna vid i en funktion :(

266 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)