[C#] Designtime errors in Web Custom Control

Pagina: 1
Acties:

  • ronald79
  • Registratie: Februari 2003
  • Laatst online: 01-07 20:52
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):
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'.
Verder WERKT de source code wel zonder compile-errors!
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.


  • ronald79
  • Registratie: Februari 2003
  • Laatst online: 01-07 20:52
Nobody?!?

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.


  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 20-08 15:04

mOrPhie

❤️❤️❤️❤️🤍

ronald79 schreef op 22 April 2003 @ 10:42:

Met deze source code heb ik een aantal probleempjes:
[list]
• Op regel 2 en 4 van de broncode in IE staan ineens ook <span ...></span>. Hoe kan dat nu weer?!?
De eerste span is om het geheel van de textbox aan te geven. De label + textbox. Dit wordt standaard door webcontrols gegenereerd. De tweede is om het label te identificeren. Ook weer standaard gegenereerd. Wen er maar aan. De webcontrols doe dit bijna overal. :)

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


  • ronald79
  • Registratie: Februari 2003
  • Laatst online: 01-07 20:52
Ai... Da's minder... :s
Dan moet ik het maar oplossen door de TD-tag buiten de webcontrol te brengen en dan maar een tabel in die TD te plaatsen.

Dus
HTML:
1
2
3
4
5
<table><tr><td>
<wx:wx_textbox id="Wx_textbox1" runat="server"  
      text="tekst" lblcssclass="ta_label" tbxcssclass="ta_textbox"  
      textboxtext="TekstboxTekst"></wx:wx_textbox> 
</td></tr></table>


waarbij <wx_wxtextbox> een <table>, <tr>, én <td> schrijft...

[ Voor 23% gewijzigd door ronald79 op 23-04-2003 15:44 ]

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.