Na heel wat ervaring met de winforms usercontrols te hebben, heb ik de draad met ASP.NET maar weer eens opgepakt.
Ik ben bezig om een kalender (jscalander van sf.net) (http://dynarch.com/mishoo/calendar.epl) om te zetten naar een ASP.NET custom user control, zodat ik deze makkelijk kan gebruiken in een project en designtime support krijgt.
De usercontrol bestaat uit een input field, en een knupske om de calendar te laten zien
Maar nu ben ik tegen een aantal vreemde dingen aangelopen. Als er gebruik wordt gemaakt van grid positioning, dan kan je de user control zelf op het scherm slepen vanuit de toolbox, en blijft daar ook staaan in design time.
maar in run time, zet de control zich ergens random neer.
Dit heb ik opgevangen, door de style tags van CUC over te nemen in een span element
Volgens mij kan dit veel beter. hoe dan?
ASP.NET controls hebben altijd een soort underscore in de ID staan van de controsl in runtime. Mijn control heeft dit niet. Daar specificeer ik de ID zelf van de input control, en de button voor de calendar.
Heeft iemand een idee hoe dit beter kan? OnPreRender
En dan nog iets. Het (de?) user control heeft ook een aantal javascript includes nodig om goed te functioneren. Deze javascript bestanden staan in de root van IIS en hebben een referentie nodig in de HEAD van de aspx pagina.
Is dit te automatiseren?
Met het ophalen van de string uit het input veld, heb ik volgens mij een aantal kunstgrepen uitgehaald:
Volgens mij moet dit ook veel beter kunnen...
Ik heb zo een control wel eens eerder gemaakt, maar toen met een popup met daarin de standaard calendar control, en twee listboxes voor de tijd. Maar aangezien popup blockers dit eventueel kunnen blocken, wil ik toch voor de javascript manier gaan.
Ik ben bezig om een kalender (jscalander van sf.net) (http://dynarch.com/mishoo/calendar.epl) om te zetten naar een ASP.NET custom user control, zodat ik deze makkelijk kan gebruiken in een project en designtime support krijgt.
De usercontrol bestaat uit een input field, en een knupske om de calendar te laten zien
Maar nu ben ik tegen een aantal vreemde dingen aangelopen. Als er gebruik wordt gemaakt van grid positioning, dan kan je de user control zelf op het scherm slepen vanuit de toolbox, en blijft daar ook staaan in design time.
maar in run time, zet de control zich ergens random neer.
Dit heb ik opgevangen, door de style tags van CUC over te nemen in een span element
code:
1
2
3
4
5
6
7
8
9
| IEnumerator inum = this.Style.Keys.GetEnumerator();
while(inum.MoveNext())
{
output.Write(inum.Current.ToString());
output.Write(" : ");
output.Write(this.Style[inum.Current.ToString()]);
output.Write(" ;");
}
output.Write("\">"); |
Volgens mij kan dit veel beter. hoe dan?
ASP.NET controls hebben altijd een soort underscore in de ID staan van de controsl in runtime. Mijn control heeft dit niet. Daar specificeer ik de ID zelf van de input control, en de button voor de calendar.
code:
1
2
3
4
5
6
7
8
9
10
11
12
| sb.Append("\n<input type=\"text\" name=\"date\" id=\"" + this.ID + "\" value=\""
+ text.Trim() + "\"/><button type=\"reset\" id=\"" + this.ID + "_b\">...</button>");
sb.Append("\n<script type=\"text/javascript\">");
sb.Append("\nCalendar.setup({");
sb.Append("\ninputField : \"" + this.ID + "\", ");
sb.Append("\nifFormat : \"%m/%d/%Y %I:%M %p\", ");
sb.Append("\nshowsTime : true, ");
sb.Append("\nbutton : \"" + this.ID + "_b\", ");
sb.Append("\nsingleClick : false, ");
sb.Append("\nstep : 1 ");
sb.Append("\n});");
sb.Append("\n</script>"); |
Heeft iemand een idee hoe dit beter kan? OnPreRender
En dan nog iets. Het (de?) user control heeft ook een aantal javascript includes nodig om goed te functioneren. Deze javascript bestanden staan in de root van IIS en hebben een referentie nodig in de HEAD van de aspx pagina.
Is dit te automatiseren?
Met het ophalen van de string uit het input veld, heb ik volgens mij een aantal kunstgrepen uitgehaald:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| [Bindable(true),
Category("Appearance"),
DefaultValue("")]
public string Text
{
get
{
return this.Parent.Page.Request[this.ID];
}
set
{
text = value;
}
} |
Volgens mij moet dit ook veel beter kunnen...
Ik heb zo een control wel eens eerder gemaakt, maar toen met een popup met daarin de standaard calendar control, en twee listboxes voor de tijd. Maar aangezien popup blockers dit eventueel kunnen blocken, wil ik toch voor de javascript manier gaan.
[ Voor 69% gewijzigd door PhoneTech op 14-05-2004 15:54 . Reden: Was nog een paar dingen vergeten ]