Ik ben kort geleden begonnen met wat te spelen in ASP.NET en C#. Ik ben nu bezig met het boek Microsoft ASP.NET Applicatie-ontwerp van Douglas J. Reilly.
In hoofdstuk 6 wordt het maken van een web custom control behandeld. Nu wilde ik er zelf ook 1 maken om te kijken of het mij ook lukt. Daarvoor heb ik de volgende source geschreven om ervoor te zorgen dat a.d.h.v. 4 argumenten de volgende HTML wordt gegenereerd:
De source-code (HTML/ASP.NET):
De broncode in IE6:
De code is gegenereerd door het volgende bestand (wx_textbox.cs):
Met deze source code heb ik een aantal probleempjes:
Nu wil ik dat het ook werkt in ontwerpmodus. Wie kan mij helpen?!?
In hoofdstuk 6 wordt het maken van een web custom control behandeld. Nu wilde ik er zelf ook 1 maken om te kijken of het mij ook lukt. Daarvoor heb ik de volgende source geschreven om ervoor te zorgen dat a.d.h.v. 4 argumenten de volgende HTML wordt gegenereerd:
De source-code (HTML/ASP.NET):
HTML:
1
2
3
4
5
| <table><tr> <wx:wx_textbox id="Wx_textbox1" runat="server" text="tekst" lblcssclass="ta_label" tbxcssclass="ta_textbox" textboxtext="TekstboxTekst"></wx:wx_textbox> </tr></table> |
De broncode in IE6:
HTML:
1
2
3
4
5
6
7
8
9
10
11
| <table><tr> <span id="Wx_textbox1"> <td class="ta_label"> <span class="ta_label">tekst</span> </td> <td class="ta_textbox"> <input name="Wx_textbox1:Wx_textbox1" type="text" value="TekstboxTekst" id="Wx_textbox1_Wx_textbox1" class="ta_textbox_textfield" /></td> </span> </tr></table> |
De code is gegenereerd door het volgende bestand (wx_textbox.cs):
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
| using System; using System.IO; using System.Web.UI; using System.Web.UI.Design; using System.Web.UI.WebControls; using System.ComponentModel; using System.ComponentModel.Design; using System.Collections; using System.Collections.Specialized; [assembly:TagPrefix("WX5", "WX")] namespace WX5 { /// <summary> /// Summary description for wx_textbox. /// </summary> [DefaultProperty("Text"), ToolboxData("<{0}:wx_textbox runat=server></{0}:wx_textbox>"), DesignerAttribute(typeof(wx_textboxDesigner))] public class wx_textbox : WebControl, INamingContainer { private string text; [Bindable(true), Category("Label"), DefaultValue("")] public string Text { get { return text; } set { text = value; } } [Bindable(false), Category("TextBox"), DefaultValue("")] public string TextBoxText { get { return (string)ViewState["textBoxText"]; } set { ViewState["textBoxText"] = value; } } [Bindable(false), Category("Label"), DefaultValue("")] public string LblCssClass { get { return (string)ViewState["lblCssClass"]; } set { ViewState["lblCssClass"] = value; } } [Bindable(false), Category("TextBox"), DefaultValue("")] public string TBxCssClass { get { return (string)ViewState["tBxCssClass"]; } set { ViewState["tBxCssClass"] = value; } } /// <summary> /// Render this control to the output parameter specified. /// </summary> /// <param name="output"> The HTML writer to write out to </param> /// protected override void CreateChildControls() { System.Web.UI.WebControls.Label label; System.Web.UI.WebControls.TextBox textbox; System.Web.UI.WebControls.TableCell LblTD; System.Web.UI.WebControls.TableCell TBxTD; textbox = new TextBox(); textbox.ID = UniqueID; textbox.Text = this.TextBoxText; textbox.CssClass = this.TBxCssClass + "_textfield"; label = new Label(); label.Text = this.Text; label.CssClass = this.LblCssClass; LblTD = new TableCell(); LblTD.CssClass = this.LblCssClass; TBxTD = new TableCell(); TBxTD.CssClass = this.TBxCssClass; LblTD.Controls.Add(label); TBxTD.Controls.Add(textbox); Controls.Add(LblTD); Controls.Add(TBxTD); } } public class wx_textboxDesigner : System.Web.UI.Design.ControlDesigner { public wx_textboxDesigner() { } public override string GetDesignTimeHtml() { TextBox tb = (TextBox) Component; StringWriter sw = new StringWriter(); HtmlTextWriter tw = new HtmlTextWriter(sw); HyperLink phLink = new HyperLink(); phLink.Text = "Leuke Textbox"; phLink.RenderControl(tw); return sw.ToString(); } } } |
Met deze source code heb ik een aantal probleempjes:
- Op regel 2 en 4 van de broncode in IE staan ineens ook <span ...></span>. Hoe kan dat nu weer?!?
- Het CS-bestand heb ik gecompileerd naar een DLL-bestand. Het DLL-bestand heb ik geconfigureerd in de Toolbox. So far so good. Maar: wanneer je het custom control sleept naar de ontwerpweergave van een nieuw .aspx bestand, zie je een nieuw control met de volgende tekst:"Error Creating Control - Wx_textbox1". Als ik overschakel naar HTML-modus en de source aanpas (maakt niet uit wat ik doe), is het <wx:wx_textbox>-control niet meer te vinden in ontwerpmodus.
- Wanneer ik het control in naar de ontwerpweergave heb gesleept, en ik vul in de Toolbox waarden in voor 'lblCssClass', dan krijg ik daarna de melding: 'Invalid property value'.
Nu wil ik dat het ook werkt in ontwerpmodus. Wie kan mij helpen?!?
[ Voor 18% gewijzigd door ronald79 op 23-04-2003 15:43 ]
In science one tries to tell people, in such a way as to be understood by everyone, something that no one ever knew before. But in poetry, it's the exact opposite.