[c# asp.net] servercontrols maken wil niet lukken

Pagina: 1
Acties:

  • shades
  • Registratie: September 2001
  • Laatst online: 19-05 08:57
Ik ben bezig om een servercontrol te maken. Gewoon voor de experience maar het gaat niet helemaal zoals ik wil. Het bouwen van de MSPress.ServerControls.SimpleControl is kinderlijk eenvoudig maar ik wil het project uitbreiden er dus designtime laten zien hoe de control er uit komt te zien en dat je design-time properties kan instellen.

Ik heb inmiddels al gezien dat ik moet inheriten van System.Web.UI.WebControls.WebControl en dat ik de INamingContainer interface moet implementeren. Verder moet je bij je control nog een Designer bouwen en dan zou het e.e.a toch al moeten gaan werken echter als ik de gemodde control op het scherm sleep zie ik niet en de html is ook raar:

HTML:
1
<CC1:SIMPLECONTROLDESIGNER runat="server"></CC1:SIMPLECONTROLDESIGNER>


Ik had meer dit verwacht en een controlbox (zoals ook een usercontrol er uit ziet):
HTML:
1
2
<CC1:SimpleControl id="SimpleControl1"
propertya="a" propertyb="b" propertyc="etcetc" runat="server"></CC1:SIMPLECONTROLDESIGNER>


De code die ik heb en heel basic is maar toch al niet werkt is als volgt.
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
    [
    Description("The simplecontrol prints simple text"),
    Designer(typeof(SimpleControlDesigner)),
    ToolboxData("<{0}:SimpleControlDesigner runat=\"server\"></{0}:SimpleControlDesigner>")
    ]
    //
    public class SimpleControl : System.Web.UI.WebControls.WebControl, INamingContainer
    {
        public SimpleControl() : base()
        {

        }

        protected override void Render(HtmlTextWriter writer)
        {
            writer.Write("I don't do anything useful,");
            writer.Write("but at least I'm a control...");
        }
    }

    public class SimpleControlDesigner : ControlDesigner
    {
        private SimpleControl simpleControl;


        public override string GetDesignTimeHtml()
        {
            return base.GetDesignTimeHtml ();
        }

        public override void Initialize(IComponent component)
        {
            base.Initialize(component);
            simpleControl = (SimpleControl) component;
        }
    }


Dit zou volgens mij moeten werken maar omdat de control niet zichtbaar wordt in de design mode van mijn webform vermoedde ik al dat er iets niet goed was. Wanneer ik de webform start krijg ik deze foutmelding:

===================
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS0011: Referenced class 'shdcms.CmsLibrary.SimpleControlDesigner' has base class or interface 'System.Web.UI.Design.ControlDesigner' defined in an assembly that is not referenced. You must add a reference to assembly 'System.Design'.

Source Error:

[No relevant source lines]

Source File: Line: 0
===================

Iemand al eens een webservercontrol gemaakt met een designer en dat properties designtime aan te passen zijn of ergen een url met een goed voorbeeld ? Zou geweldig geholpen zijn

EDIT:
Alle references zijn aanwezig en tijdens builden treden er geen fouten of warnings op

[ Voor 7% gewijzigd door shades op 16-09-2004 22:19 ]

https://k1600gt.nl


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Weet je echt 1000% zeker dat je een reference naar System.Design hebt? Het lijkt me dat de compiler zich niet vergist in de foutmelding die hij geeft.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:52
Als ik het me nog goed herinner, dan wordt je webpagina gecompiled net voordat ie de eerste keer gerunned wordt.
Je project (de webapp die jouw control dus gebruikt) moet blijkbaar ook een referentie hebben naar die System.Design assembly.

https://fgheysels.github.io/


  • shades
  • Registratie: September 2001
  • Laatst online: 19-05 08:57
whoami schreef op 17 september 2004 @ 08:37:
Als ik het me nog goed herinner, dan wordt je webpagina gecompiled net voordat ie de eerste keer gerunned wordt.
Je project (de webapp die jouw control dus gebruikt) moet blijkbaar ook een referentie hebben naar die System.Design assembly.
Ik heb System.Design als using opgegeven in de default.aspx.cs en bij references.
Wat ook raar is is dat wanneer ik de control op het design van de form sleep ik op de codebehind op geen verwijzing daar naar krijg (protected SimpleControl SimpleControl1; ofzo)

https://k1600gt.nl


Verwijderd

offtopic:
Mischien dat dit niet de juiste plaats is maar het boekentopic is misschien beter... Maar weet iemand nog een goed boek voor het ontwerpen/maken van server controls?

  • shades
  • Registratie: September 2001
  • Laatst online: 19-05 08:57
Ik heb hier een posting gevonden en dan in bijzonder de reply van een zekere Robozel.
Zijn voorbeeld werkt (zit wel meer in) maar ik kan nu niet echt ontdekken wat ik nu mis heb gedaan.

Verder is hier niet echt in verwerkt dat de control deels gerenderd wordt maar ben inmiddels wel een stuk verder van gisteren.


Werkt niet.... eerste antwoord van Victor Garcia Aprea schijn je wel iets mee te moeten kunnen doen maar weet niet hoe ik het verder moet uitwerken.


Update:
Op de msdn site heb ik en voorbeeld gevonden: Template Control Sample

Ik kan nu dus dit doen:
HTML:
1
2
3
4
5
<custom:TemplatedFirstControl id="TemplatedFirstControl1" runat="server">
    <FirstTemplate>
        Hier je gewone html zooi en teksten enzo...
    </FirstTemplate>
</custom:TemplatedFirstControl>


Maar die FirstTemplate-tag wil ik dus niet. Ik heb de code nog niet helemaal door dus ben nog wel even zoet. Als iemand me nog een hint wil geven, graag..

[ Voor 55% gewijzigd door shades op 17-09-2004 16:20 ]

https://k1600gt.nl

Pagina: 1