Toon posts:

[C#] Usercontrol werkt niet in design time

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een probleem met een mijn usercontrol. Ik heb een content usercontrol gemaakt om een table te renderen met ronde hoeken, in dit control kan ik dan mijn eigen content in plaatsen. Dit werkt allemaal prima maar alleen zodra ik er content in zet kan de design mode van VS2005 er niet meer mee omgaan. Ik heb al veel op google lopen zoeken naar dit probleem maar niet een oplossing gevonden die voor mij werkt. De error die hij geeft als ik hem op een pagina heb geplaatst is:

Error 3 ContentFrame2:Type 'System.Web.UI.UserControl' does not have a public property named 'Content'.

Hij kan dan de content die ik geplaatst heb niet meer renderen. Hieronder zie je de code. Ik hoop dat iemand een oplossing hiervoor weet.

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
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.ComponentModel;

[PersistChildren(true), ParseChildren(true)]
public partial class Controls_ContentFrame : System.Web.UI.UserControl
{
    [NotifyParentProperty(true)]
    [PersistenceMode(PersistenceMode.InnerProperty)]
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
    public PlaceHolder Content
    {
        get { return content; }
    }

    public string Width
    {
        get { return contentFrameDiv.Style["width"]; }
        set 
        { 
            contentFrameDiv.Style["width"] = value;
            contentDiv.Style["width"] = value;
        }
    }

    public string Height
    {
        get { return contentFrameDiv.Style["height"]; }
        set
        { 
            contentFrameDiv.Style["height"] = value;
            contentDiv.Style["height"] = value;
        }
    }

    public string Overflow
    {
        get { return contentDiv.Style["overflow"]; }
        set { contentDiv.Style["overflow"] = value; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {

    }
}

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
De foutmelding geeft toch al een indicatie ? Je hebt geen public property Content. Nu zie ik in je code dat je die wel hebt, maar misschien moet die wel niet read-only zijn ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op vrijdag 13 april 2007 @ 12:41:
De foutmelding geeft toch al een indicatie ? Je hebt geen public property Content. Nu zie ik in je code dat je die wel hebt, maar misschien moet die wel niet read-only zijn ?
Het geeft inderdaad wel een indicatie maar een oplossing heb ik hier nog niet gevonden. Het blijkt dat het control niet geneste controls kan renderen in design mode. Het control werkt wel naar behoren maar het is vervelend dat de design mode er niet goed mee kan omgaan. Ik hoop hier nog een oplossing voor kan vinden.

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
Als je property read only is kun je hem niet gebruiken om waardes te setten. (en waarom wil je hem dan toch in de designer laten zien?)
Heb je in de control definitie op de pagina toevallig het attribuut (property) Content staan?

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


Verwijderd

Topicstarter
4of9 schreef op vrijdag 13 april 2007 @ 13:18:
Als je property read only is kun je hem niet gebruiken om waardes te setten. (en waarom wil je hem dan toch in de designer laten zien?)
Heb je in de control definitie op de pagina toevallig het attribuut (property) Content staan?
als ik hem ook een Set geef maakt het verder niet uit. Probleem blijft.

code:
1
2
3
4
5
    <sp:ContentFrame ID="ContentFrame1" runat="server" Height="100%" Width="250px">
        <Content>
            <asp:Label ID="ItemName" runat="server"></asp:Label>
       </content>
    </sp:ContentFrame>

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Er vanuitgaande dat je code wel compiled:

Ik zou beginnen met alle temp-files weg te gooien (in de debug en/of releasefolder), en je solution opnieuw te builden. VS lijkt af en toe met oude data te werken...

Verwijderd

edit: ff nagezocht. klopt idd niet... moet wat vaker gaan proggen.

[ Voor 115% gewijzigd door Verwijderd op 16-04-2007 11:34 ]


  • cspare
  • Registratie: Oktober 2006
  • Laatst online: 29-07 22:19

cspare

What the deuce?!

Ik ben niet echt thuis in asp.net, dus misschien zeg ik wel iets heel doms, maar misschien heb je er wat aan ;)

In mijn VS omgeving heeft de UserControl class geen Content property. Zou het niet gewoon werken als je [NotifyParentProperty(true)] weghaalt boven je Content property?

The one who says it cannot be done, should never interrupt the one who is doing it.


Verwijderd

Topicstarter
Hoi ik heb inmiddels een oplossing gevonden. Ik heb nu een custom control class geschreven. Nu geeft de designviewer geen problemen meer en je kan de table met ronde kantjes zien in de designer. Maar nu heb ik dus het probleem dat je de control in designview niet kan editten. Ik wil er dus controls in mijn placeholder kunnen slepen maar dan moet ik de control in edit mode zien te krijgen. Heeft iemand daar ervaring mee? Ik heb wel op internet gezocht en daar staat dat je een apparte designer class moet schrijven maar ik heb zo echt geen idee hoe. Hieronder de code oplossing van mijn designer probleem:

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
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.ComponentModel;
using System.Windows.Forms.Design;
using System.Web.UI.Design;


namespace RoundedCorners
{

    public class roundedCorners : CompositeControl
    {

        [PersistenceMode(PersistenceMode.InnerProperty)]
        public PlaceHolder Content
        {
            get { return _content; }
            set { _content = value; }
        }
        private PlaceHolder _content;


        protected override void CreateChildControls()
        {
            StringBuilder sbTop = new StringBuilder();
            StringBuilder sbBottom = new StringBuilder();

            sbTop.AppendLine("<table border='0' cellpadding='0' cellspacing='0' >");
            <--.................-->
            sbBottom.AppendLine("</table>");

            Controls.Add(new LiteralControl(sbTop.ToString()));
            Controls.Add(Content);
            Controls.Add(new LiteralControl(sbBottom.ToString()));
        }

        
    }
}
Pagina: 1