webForumDet fria alternativet

Problem med knappar i dynamisk laddad UserControl

.NETur .NET

1 svar · 262 visningar · startad av The_Hulk

Medlem sedan juni 20031 837 inlägg
Frågan#1

Hej!

Jag har en sida där jag laddar in olika UserControl beroende på vilken knapp man klickar på.

I de här UserControl har jag lite textfält och knappar.

Sidan som den här kontrollerna anropas ifrån ligger ju i ett formulär som körs på serversidan.
Därför kan jag inte lägga ett formulär (som körs på serversidan) i min UserControl.

Jag skapade några textfält och en knapp för att spara värdena.
I Visual Studio så dubbelklickade jag på knappen så jag automatiskt kom till funktionen för Click. Där skrev jag lite kod och la till brytpunkter men det verkar inte som den här koden anropas för jag får ingen träff på brytpunkterna och det skrivs inte heller ut något med Response.write("...");

Någon som känner igen felet eller ska jag posta lite av koden?

Medlem sedan sep. 200153 inlägg
#2

I ASP.NET används ett koncept som kallas för PostBack. En PostBack sker t.ex. när man klickar på en <asp:button runat=server /> och det som händer är att en POST Request skickas till samma URL som man är på.

I ASP.NET finns funktionalitet för persistens mellan Requests och en möjlighet för persistens är något som kallas för ViewState. När en PostBack sker läser ASP.NET-"motorn" in informationen från ViewState och jämför med de nya värdena som kommer från POST Requesten. På så vis får man persistens mellan requests i form av att t.ex. en <asp:DropDownList> "kommer ihåg" vilken item som var vald innan postback.

Det förutsätter att man har exakt en (1) <form runat=server> tag på sidan. Du behöver alltså inte ha ett till <form> någon annanstans, eftersom allt som har runat=server hanteras av PostBack-funktionaliteten (såvida man inte stänger av det för den kontrollen, vilket man kan).

Nu till din fråga:

Det enklaste sättet att använda UserControls på är att lägga in dem på WebFormet (.aspx) direkt:

<uc1:NewsList runat=server id=MyNewsList />

Om du inte vill att den ska synas förrän du klickar på en viss knapp, lägger du till Visible=False i taggen, så kommer den inte ens att renderas. Sen när du vill visa den sätter du helt enkelt MyNewsList.Visible = true; i din Button1_Click event handler.

Jag har fått för mig att du eventuellt laddar dina UserControls dynamiskt, dvs genom LoadControl(..). Det går ju också att göra, men det ställer högre krav på din förståelse för ASP.NETs livscykel. Det kan bli lite småjobbigt med vad som laddas när och vad som finns tillgängligt när och sånt.

Ta bort det formuläret du la till i din UserControl och testa igen.

Om du inte får det att funka, posta lite kod, så ska vi se vart det är fel någonstans.

::m

124 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)