webForumDet fria alternativet

Nåt sätt att kolla innehåll innan page_load körs

.NET

27 svar · 638 visningar · startad av Nöff · sida 2 av 2

Frågan, av Nöff

Hej.. Om man har en dropdownlist med en händelsehanterare på. när man klickar på dropen så anropas: DropDownList1.SelectedIndexChanged() { Response.Write(DropDownList1.SelectedIndex) } Men, det är ju så att PageLoad körs ju först. sen funktionen. 1\. Kan man påverka detta så att DropDownList1.SelectedIndexChanged funktionen körs först och sen pageLoad?. eller 2\. Kan man innan PageLoad

Läs frågan i sin helhet →
Medlem sedan dec. 2000537 inlägg
#21

Jag tror inte det spelar så stor roll om du binder repeatern 2 gånger. Cleara den först bara.

Medlem sedan nov. 2003569 inlägg
#22

Det funkade inte Gladh.
Repeatern förlorade sina selectade värden om jag la bindrepeater() i händelsefunktionerna istället för i Page_Load IsPostBack.

Verkar som man bara kan skapa om dynamiska kontroller i Page_Load.

Medlem sedan maj 20012 812 inlägg
#23

Verkar som man bara kan skapa om dynamiska kontroller i Page_Load.

Vad menar du med dynamisk kontroll? En dynamisk kontroll för mig är en kontroll som jag skapar i CodeBehind-filerna. Och inte behöver finnas med på ASPX-sidan.

Dessa dynamiska kontroller kan man skapar precis var man vill i sin codebehind-sida.

Dett skulle dock underlätta om du la ut lite kod som vi kan titta på, för jag kan inte se att det skall vara så svårt...

Prästen: Problemet är ju med prestanda, det är dumt att göra allt 2 gånger om det endas behövs göras 1 gång.

- M

Medlem sedan nov. 2003569 inlägg
#24
public void bindrepeater(int kundID)
{
OleDbDataReader reader=SQLFILLREADER("SELECT * FROM kund WHEREkund.ID=" + kundID);

reader.Read();
Label labelkund=new Label();
labelkund.Text=reader["kund"].ToString();

TextBox textboxID=new TextBox();
textbox.Text=reader["ID"].ToString();

OleDbDataReader reader2=SQLFILLREADER("SELECT * FROM produkter WHERE produkter.kundID=" + reader["ID"].ToString()));

while(reader2.Read())
{
ListItem list=new ListItem();
list.Value=reader2["kundID"].ToString();
list.Text=reader2["produktnamn"].ToString();
drop.Items.Add(list);
}

Label label=new Label();

Repeater1.Controls.Add(new Control());
Response.Write(Repeater1.Controls.Count);
Repeater1.Controls[Repeater1.Controls.Count-1].Controls.Add(labelkund);
Repeater1.Controls[Repeater1.Controls.Count-1].Controls.Add(textbox);
Repeater1.Controls[Repeater1.Controls.Count-1].Controls.Add(drop);
Repeater1.Controls[Repeater1.Controls.Count-1].Controls.Add(label);

}

här

Dessa dynamiska kontroller kan man skapar precis var man vill i sin codebehind-sida.

Det verkar inte så, placerar jag den i händelsefunktionerna förlorar den de selectade/ifyllda värdena vid postback, men placerar jag den i Page_Load behåller den sina värden vid postback. ASP.NET är väl kanske uppbyggd så att dynamiska kontroller alltid ska byggas i Page_Load eller nåt.

Prova att bygg en egen dynamisk kontroll och placera den i händelsefunktionerna och i Page_Load om vartannat så får du se.

Medlem sedan maj 20012 812 inlägg
#25

Har läst på massor om ditt problem, och har inte blivit mycket klokare :(

Tyvärr verkar det som om .NET helt automatiskt fixar till Postbacken om skapandet av controllen ligger i Page_Load() annars så tappar man den.

Hittade dock denna länk, som hävdare att han löst problemet. Har dock inte kollat kode (får inte ladda ner kod på jobbet, brandväggen tror allt som innehåller kod, är virus :(, till och med vanliga txt filer med kod, stoppas.)

http://www.denisbauer.com/ASPNETSamples.aspx

- M

Medlem sedan nov. 2003569 inlägg
#26

du gladh.
Jag tror jag kommit till den punkt där det kanske är bättre att göra applikationen i WinForms istället, jag börjar tro att denna applikationen inte är helt lämpad för Webforms. Eller jag får se, får tänka över det.

Men tack för länken du!. Det var precis vad jag behövde.
du har ingen i C#, jag är urusel på VB :e

Men är det OK att lägga bindrepeater() i Page_Load?, så jag först återskapar den vid postback och sen läser igenom vad användaren har kryssat i för värden och sen sparar ner i min databas?. Är det korrekt att göra så?. Eller ska jag lägga den i Page_Init istället?.

Medlem sedan maj 20012 812 inlägg
#27

Kan du göra den i WinForms så låter det som ett helt klart enklare alternativ.

Tyvärr har jag ingen i C#.

Som jag förstod det så skall det inte spela någon roll om du gör det i Load eller Init

- M

Medlem sedan nov. 2003569 inlägg
#28

Hmm nånting jag upptäckte när man gör dynamiska dropdownlistor i repeaters är att fyller man dropdownlisten med items EFTER man "add:at" dropdownlisten i repeatern så hålls viewstaten hårdare på de selectade värden än om man fyller dropdownlisten med items INNAN man "add:at" dropdownlisten i repeatern.

Den där länken förklarade lite om det, intressant.

545 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
411 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
138 ms — ändringar (db)