Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[ASP.NET] CompositeControl property wordt niet geladen

Pagina: 1
Acties:

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
Hallo,

Ik zit met een probleempje waar ik niet uitkom en ook niet echt veel over kan vinden.

Ik heb een CompositeControl gemaakt. Deze wordt declaratief gezet in de html.

HTML:
1
<CCI:CCITextBox runat="server" ID="_1187871133_"  TextMode="SingleLine" IsRequired="True"  />


Het control zelf bestaat uit een TextBox en een RequiredFieldValidator.
Ik heb een aantal properties gedefinieerd in mijn control die ik doorgeef aan de controls in het CompositeControl. Dit gaat goed bij het instantieeren van het CompositeControl.

Ik heb echter ook een aantal properties die ik niet delegeer naar een "sub" control. Deze worden echter na de CreateChildControls geladen en ik wil deze waardes hebben in de CreateChildControls method.

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
public class CCITextBox : CCIFormBuilder.CCIFormElement
    {
        private TextBox _textBox;
        private RequiredFieldValidator _reqVal;

        private bool _isRequired;
        
        
        public CCITextBox() 
        { 
        
        }

        protected override void RecreateChildControls()
        {
            EnsureChildControls();
        }

  
        protected override void  CreateChildControls()
        {
            _textBox = new TextBox();
            _textBox.ID = "txt_" + this.ID;
            this.Controls.Add(_textBox);

            if (_isRequired)
            {
                _reqVal = new RequiredFieldValidator();
                _reqVal.ID = "reqval_" + this.ID;
                _reqVal.ErrorMessage = "Error 14";
                _reqVal.ControlToValidate = "txt_" + this.ID;
                _reqVal.EnableClientScript = true;
                _reqVal.SetFocusOnError = true;
            }

            this.Controls.Add(_reqVal);
        }

        public override string GetValue()
        {
            return this.Text;   
        }

   
        public bool IsRequired
        {
            get 
            {
                return _isRequired ;
            }
            set 
            {
                
                 _isRequired = value;
            }
        }

    
        public string Text
        {
            get
            {
                EnsureChildControls();
                return _textBox.Text;
            }
            set
            {
                EnsureChildControls();
                _textBox.Text = value;
            }
        }

        public string TextMode
        {
            get 
            {
                EnsureChildControls(); 
                return _textBox.TextMode.ToString();
            }
            set 
            {
                EnsureChildControls();
                _textBox.TextMode = (TextBoxMode)Enum.Parse(typeof(TextBoxMode), value);
            }
        }
    }


Hoe kan ik er voor zorgen dat mijn IsRequired property beschikbaar is in de createChildControls method? Ik kan bijvoorbeeld wel de IsRequired property delegeren naar de _reqVal.Enabled property.

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
  public bool IsRequired
        {
            get 
            {
                return _reqVal.Enabled ;
            }
            set 
            {
                
                 _reqVal.Enabled = value;
            }
        }


     protected override void  CreateChildControls()
        {
            _textBox = new TextBox();
            _textBox.ID = "txt_" + this.ID;
            this.Controls.Add(_textBox);

           // if (_isRequired)
           // {
                _reqVal = new RequiredFieldValidator();
                _reqVal.ID = "reqval_" + this.ID;
                _reqVal.ErrorMessage = "Error 14";
                _reqVal.ControlToValidate = "txt_" + this.ID;
                _reqVal.EnableClientScript = true;
                _reqVal.SetFocusOnError = true;
           // }

            this.Controls.Add(_reqVal);
        }


Dit werkt wel maar ik wil het dus op de andere manier doen (als dat mogelijk is)

Ik heb al met ViewState en ControlState gevogeld maar ook dat mocht niet baten. (ik krijg dan een nullreference exception als ik in de CreateChildControls een this.IsRequired doe en probeer de waarde uit de viewstate te returnen.

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


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 13-12-2024
niemand?

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