24. marts 2005 - 06:44Der er
5 kommentarer og 1 løsning
Oprettelse af metode i WebCustomControl
Hej
Når jeg tilføjer en WebCustomControl klasse til mit projekt, kommer den med en default metode: Protected override void Render(HtmlTextWriter output){ output.Write(text); //som referer til en //default get/set metode }
Til denne metode skal jeg tilføje et kald til min egen metode, som kalder en hashtabel med navne på labels, buttons mm. Metoden skal så påklistre de navne på de aktuelle labels mm.
Spørgsmålet er så: Hvordan aktiver jeg min metode i metoden Render.
Metoden har jeg lagt i klassen(WebCustomControl) og prøvet med almindeligt metode kald, ingen resultat.
En anden ting, min metode: protected void SetCaption(ControlCollection ctrls, Hashtable messages){}
Sammenligner den valgte sides controls id med key id i hashtabellen og hvis der er sammenfald indsættes værdien som eks Label1.Text = værdi. Hashtabellen ligger, via global.asax, globalt - fuld adgang.
Ovennævnte metode fungerer udemærket, når jeg ligger den på den enkelte side - men det ville være rart hvis den kun ligger et sted og starter automatisk.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
private void OtherMethod(HtmlTextWriter output) { // hvad du nu vil skrive }
Jeg kan dog ikke helt se værdien af det....
Hvis den kontrol du vil lave skal ende med at rendere diverse andre kontroller, som du vil håndtere events fra mv. kan du - med et lille performancehit, men en nemmere måde at lave kontrollen på - overskrive den metode der hedder CreateChildControls();
// her et lille eksempel hvor der indsættes en tekstboks og en knap : protected override void CreateChildControls() { TextBox tb = new TextBox(); Button btn = new Button(); this.Controls.Add(tb); this.Controls.Add(btn); ChildControlsCreated = true; base.CreateChildControls (); }
Hvis du ønsker at håndtere f.eks. et click-event på knappen kan du så : (her også vist hvordan du så kalder din egen metode)
protected override void CreateChildControls() { TextBox tb = new TextBox(); Button btn = new Button(); btn.Click += new System.EventHandler(btn_Click); this.Controls.Add(tb); this.Controls.Add(btn); SetCaption(this.Controls, HashTable messages); ChildControlsCreated = true; base.CreateChildControls (); }
og så en handler : protected void btn_Click(object sender, EventArgs e) { // hvad der nu skal ske når der klikkes på knappen }
Hvis ovenstående skal fungere skal du implementere det interface der hedder INamingContainer på din kontrol.... Altså der hvor klassen starter f.eks.:
public class SomeCustomControl : Control, INamingContainer
Håber jeg ikke fuldstændig har misforstået hvad det er du vil, men hvis det er tilfældet må du jo lige give mig et vink :o)
Det er en lille smule kompliceret, så du får lige historien fra toppen af.
Jeg er studerende og har i forbindelse med studiet fået muligheden for at skrive et projekt for et kinesisk firma - i Kina. De taler ikke særlig godt engelsk, det meste kommunikation foregår med fagter, gæt og til dels "prototyper".
Som sagt, skal jeg lave en hjemmeside, der kan styre udvikling af projekter og mødeaktiviteter og lagre dette på en db. Da firmaet har samarbejdspartner/kunder i Japan og forventer at få det i USA, skal siden kunne skifte mellem tre sprog.
Det er dette skift mellem sprog, jeg sidder og pusler med nu. Jeg har lavet en metode som løber control collection igennem på en side og sammenligner controlid med en hashtabel, og ved korrekt sammenligning findes den text der skal sættes på en label - eller anden control på siden.
Denne metode fungerer hvis man ligger på den enkelte side(metoden kommer længere nede). Kineserne insisterer dog på at den skal ligge globalt og jeg fik foreslået at man lagde den som en statisk metode : Klasse.metode - og foreslog dette for kineserne. De vendte tilbage og sagde de ville have den i WebCustomControl, således at den blev aktiveret automatisk ved sideskift - og jeg mener ikke, at de er til at rokke i den retning.
Og lige for en ordens skyld - min baggrund er Java. C# kender jeg fra et halvårskursus, hvor jeg ikke var tilmeldt - men pga. interesse fik lov at sidde med til nogle af lektionerne. ASP har jeg haft to måneders (ikke så god) undervisning i.
Som du kan se, løber den controls og hashtabel igennem - finder den rigtige betegnelse(navngivning af label) og sender den i en switch. Switch er ikke fuld udbygget - kun til prøvebrug.
Jeg kan godt følge det du skriver om metoden "Render", men min metode giver du en parameter (HtmlTextWriter output) - kan jeg så bare tilføje mine egne parameter, altså metode(HtmlTextWriter output, ControlCollection ctrls, Hashtable messages). Vil det fungerer?
En ordentlig mundfuld, men jeg håber at den gav et lidt bedre indblik i problemet - hvis ikke, spørg endeligt. Jeg er meget opsat på at få løst problemet.
For god ordens skyld vil jeg på forhånd undskylde svartider. Til dels er vi 7 timer foran og til dels har jeg en 100mbps der, når den er på toppen svinger mellem 3-4 kb i download.
det ser lidt tvivlsomt ud det du har aftalt der. har du en messangerkonto eller lignende jeg kan kontakte dig på ? (email, messanger, skype - eller hvilken oplysning du nu har det bedste med at lægge herud... jeg skal nok kontakte dig på den du angiver) mvh
using System; using System.Collections; using System.Web.UI;
namespace Demo { public class LocalizationBase : Page { protected override void Render(HtmlTextWriter writer) { SetCaption(...); base.Render (writer); }
protected virtual void SetCaption() { // } } }
mvh
Synes godt om
Ny brugerNybegynder
Din løsning...
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.