23. oktober 2004 - 11:15Der er
13 kommentarer og 1 løsning
Masterpages der ændre tag id?
Når man arbejder med masterpages i whidbey og tilføjer en contentpage. Alt inden på den contentpage ændre alle dine tags id's til id navn + contentholderens navn hvilket er ret irretrende hvis man bruge javascript til at hive elementerne ud. Nogen der har en løsning hvor man kan forhindre dette?
jeg har ikke arbejdet så meget med whidbey, men det lyder som om en masterpage implementerer INamingContainer, og at ContentPages lægger sig som underkontrollen til den aktuelle MasterPage. hvis det er tilfældet er det ikke noget du kan komme ud over, da det er garanteret af framworket at der genereres unikke id's under en NamingContainer. men... det er ikke noget jeg har kigget nærmere på, og jeg er på vej ud af døren.
Det kan du tro jeg er:D Det er ikke unique id's men blot det id man selv satte og så navnet på placeholderen(containeren). Og jeg tror du har ret det er der ik så meget at gøre ved. Man kunne løse det ved at bruge name i stedet for id i mine html tags men getelementsby id virker paradoksalt nok kun på id på trods af der også er en getelementbyid. Jeg har tænkt over om der er andre attributter kan kan sætte på en html tag og så finde den tag ud fra satte tag. Har ikke rigtigt fundet en god løsning endnu så en løsning på javascriptdelen vil selvfølgelig og kast epoint af sig:D
Man får vanligvis en fejl hvis man prøver at poste en form, hvor der er serverkontroller med samme id - prøve f.eks. sådan en kode her :
TextBox tb1 = new TextBox(); tb1.ID = "SomeTextBox"; Form1.Controls.Add(tb1);
TextBox tb2 = new TextBox(); tb2.ID = "SomeTextBox"; Form1.Controls.Add(tb2);
Det vil godt nok give dig begge tekstbokse frem på skærmen, men lige så snart du prøver at submitte formen, vil du få en fejl af frameworket... typisk at FindControl (...) kræver at kontrollerne har unikke id's.
html-en der genereres er som følger : <input name="SomeTextBox" type="text" id="SomeTextBox" /> <input name="SomeTextBox" type="text" id="SomeTextBox" />
Mht. til name og id og den slags, så kan du prøve dette lille forsøg :
Tag bare teksboksene fra før, og prop dem ind i en container af en art, sådan her :
// --- SomeContainer container = new SomeContainer();
TextBox tb1 = new TextBox(); tb1.ID = "SomeTextBox"; container.Controls.Add(tb1);
TextBox tb2 = new TextBox(); tb2.ID = "SomeTextBox"; container.Controls.Add(tb2);
Form1.Controls.Add(container); // ---
og så sørger du for at skrive SomeContainer sådan her :
// --- public class SomeContainer : Control { protected override void CreateChildControls() { base.CreateChildControls (); Controls.Add(new Panel()); } } // ---
Ovenstående vil give nøjagtig samme html for tekstboksene : <input name="SomeTextBox" type="text" id="SomeTextBox" /> <input name="SomeTextBox" type="text" id="SomeTextBox" /> (læg for øvrigt mærke til at name sættes til det samme som id'et)
Men.... hvis du så sørger for at SomeContainer implementerer INamingContainer (det er et tomt interface), så sker der ting og sager :
SomeContainer kommer til at se sådan her ud : // --- public class SomeContainer : Control, INamingContainer { protected override void CreateChildControls() { base.CreateChildControls (); Controls.Add(new Panel()); } } // ---
Der er stadig det samme problem med at kontrollerne ikke har unikke id's under namingcontaineren..... hvis du ikke selv sætter .ID får du bare sådan en her :
På den måde har du altså det resulterende id tilgængeligt i koden, og du kan bruge den i forbindelse med script-generering og den slags, og på den måde sikre, at det er ligemeget om du sætter dine kontroller direkte ind på en side, eller om du sætter dem ind i en namingcontainer af en art... scripts skal nok virke alligevel. (men det kræver self. at du skriver dem i din serverside kode - med de parametre der skal til.... jeg vil gerne skrive et lille eksempel på det, hvis det skulle være).
Men... her til sidst, så må jeg jo lige nævne, at jeg ikke har været inde og læse noget specifikt omkring masterpages mv.
Håber du kan bruge alt mit ævl til et eller andet... hvis der er noget der er helt ulæseligt/uforståeligt må du lige sige til.
Har prøvet at gå væk fra id ved at navigere i documnet vi nextSibling parent osv. men nu ser det ud som det er et postback problem med whidbey. Tror det er sidste gang jeg udvikler i en beta version. Vil forsøge at lege med dit eksempel takker mange gange for din interresse.
jeg har ikke umiddelbart observeret problemer med at arbejde i whidbey og køre på v2.0 af frameworket. jeg har godt nok kun hygget mig lidt med det en enkelt week-end, men tog jeg en solution med 35 projekter, hvor det ene var en web-frontend, hvor alt er opbygget dynamisk.... alt syntes at fungere helt fint efter jeg havde fikset nogle whidbey-specifikke ting omkring page-direktivet (og så foretog jeg mig ikke andet).
jeg tror ikke jeg ville være bekymret over at rulle over på den, selv om den er i beta, men jeg vil meget gerne høre hvis du støder på noget klamt.
Kan man ikke give point for en kommentar. Er lidt ny med sitet men det ville da til tider være relevant med point til kommentar da jeg ofte ser kommentar der er point værd?
Ja tror du har ret nu er dit nick væk fra min menu. Skal jo lige lære sitet at kende syntes forresten det er ret fedt men kan dele siden viden på denne måde!
ja det er et fedt system de har fået skruet sammen herude :o) ... dejlig ukompliceret måde det kører på synes jeg.
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.