Hvordan sætter du teksten fra databasen ind nu? Du kan altid loade en usercontrol med: Control c = LoadControl("virtuel sti til kontrollen"); somePlaceholder.Controlls.Add(c);
Teksten fra databasen bliver indsat af brugeren i en Editor, han kan så indsætte nogle tags ([$$]) for at fortælle at der skal indsættes en bestemt funktion (en usercontrol) på det sted.
Det var mere hvordan du så sendte det den anden vej ... altså når slutbrugeren kigger på resultatet (går ud fra at det sådan en cms-agtig ting du bikser med). Mvh
For i = 0 To sArray.Length - 1 If sArray(i).StartsWith("[$") And sArray(i).EndsWith("$]") Then ' Load og add den tilhørende UserControl Else Me.phTmp.Controls.Add(New LiteralControl(sArray(i))) End If Next
Så langt så godt. Med inspiration af forslaget fra thrytter fik jeg lavet følgende kode:
// Der kontrolleres for om der er indsat usercontrols på siden if (indhold.Contains("[$")) { //Hvis der er usercontrols indsættes disse på de rette pladser indhold = indhold.Replace("[$", "#[$"); indhold = indhold.Replace("$]", "$]#"); string[] indhold_array = null; indhold_array = indhold.Split('#');
for (int i = 0; i < indhold_array.Length; i++) { if (indhold_array[i].IndexOf("[$") != -1) { string usercontrol_navn = indhold_array[i]; usercontrol_navn = usercontrol_navn.Replace("[$", ""); usercontrol_navn = usercontrol_navn.Replace("$]", "");
MEN hvis jeg laver noget postback i min usercontrol virker det ikke. Sender jeg en querystring med i url kan jeg heller ikke fange den fra min usercontrol.
Du bliver desværre nødt til at kalde dit kodeeksempel ved hvert postback. Betyder også at teksten skal hentes fra basen hver gang, med mindre denne gemmes i ViewState.
Response.Write(Request.RawUrl.ToString()); string navn = Request.QueryString["navn"];
så udsriver den url'en med quesrystring, men jeg får bare aldrig det navn når jeg spørg efter den i min næste handling.
Med hensyn til at lave et postback i min usercontrol forstår jeg godt det ikke virker for den event der bliver kastet blivder vel aldrig "grebt" for der bliver jo loadet en ny usercontrol. Men de må man da kunne løse på en eller anden måde?
Hvis du vil fange / gribe et event fra en kontrol kræver det, at kontrollen er en del af kontroltræet på siden.
Normalt kan .net parseren ?? se kontroltræet på .aspx siden, men når der postback'es efter (dynamisk) tilføjelse af kontroller mangler disse i kontroltræet. Og er grundet til at dynamisk tilføjede kontroller skal tilføjes ved hvert postback (hvis du vil fange events)
Ved ikke om man kan sige, at der loades en ny usercontrol - det er egentlig den samme. Tekstbokse og andre kontroller på den loadede usercontrol bevarer forøvrigt deres værdier.
Ved ikke om forklaringen rækker - måske har snepnet en bedre.
Der instantieres en ny kontrol i koden, men fordi det sker på samme måde som sidst siden blev loadet, ender kontrollen med at have samme id, hvorved dens tidligere tilstands kan slås op og hentes i viewstate. Mvh
Hvilket event ... Er det et event du har internt i din kontrol, eller vil du gerne på din form, abbonnere på et event din usercontrol populerer? Hvis det er events du gerne vil abbonere på udefra, må du abbonnere på dem ved indsættelsen: indhold_ph.Controls.Add(LoadControl(usercontrol_navn + ".ascx")); Vil derfor ikke være tilstrækkeligt:
Har du en kontrol der hedder SomeControl - der tilbyder et event (SomeEvent) - må du gøre sådan her istedet:
SomeControl c = LoadControl(usercontrol_navn + ".ascx") as SomeControl; c.SomeEvent += new EventHander(SomeHandler);
Og det må du så have defineret:
protected void SomeHandler(object sender, EventArgs e) { // .... et eller andet der skal gøre. }
Hvis det er event internt i din usercontrol - f.eks. at du håndterer klikeventet på en knap der er indsat på kontrollen, skulle der ikke være nogle problemer med at de fungerer - sålænge kontrollen indsætter hver gang.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.