2012-04-06 10 views
0

Ich habe ein benutzerdefiniertes Serversteuerelement, das einen RadEditor (im Grunde eine Textarea) umschließt. Ich versuche, eine CustomValidator, um es dynamisch hinzuzufügen, aber ich erhalte diesen Fehler bei der ersten PageloadDynamisch Erstellen von CustomValidator in Serversteuerelement

kann nicht von der ‚ControlToValidate‘ Eigentum ‚‘ verwiesen Kontrolle id ‚RadEditor1‘ zu finden.

Dies ist der Code, den ich in meinem Server Kontrolle bin mit dem CustomValidator zu erstellen:

protected override void OnInit(EventArgs e) 
{ 
    var validator = new CustomValidator(); 
    validator.CssClass = "validator-error"; 
    validator.Display = ValidatorDisplay.Dynamic; 
    validator.ControlToValidate = this.ID; 
    validator.Text = "You've exceeded the maximum allowed length for this field"; 
    validator.ClientValidationFunction = "checkLength"; 

    this.Controls.Add(validator); 

    base.OnInit(e); 
} 
+0

Gibt es in Ihrem Server-Steuerelement leiten sich von ' RadEditor'? –

+0

Ja, tut es. 'öffentliche Klasse RichTextEditor: RadEditor {}' – msigman

Antwort

1

Das Problem ist, dass RadEditorINamingContainer implementiert, so ASP.NET windet unter Ihrem Serversteuer up suchen Kinder für eine Kontrolle mit dem Namen . Natürlich ist es nicht erfolgreich, weil keine untergeordnete Kontrolle hat, die genannt wird.

Der Trick, den ich verwenden ist, eine spezielle ID wie "." wählen die übergeordnete Steuerung zu verstehen, selbst:

protected override Control FindControl(string id, int pathOffset) 
{ 
    return (id == ".") ? this : base.FindControl(id, pathOffset); 
} 

Dann nutzen "." als ControlToValidate:

validator.ControlToValidate = "."; 
+0

Brilliant. Arbeitete perfekt. – msigman

+2

Fügen Sie ein ".." hinzu, um auf das übergeordnete Element zu verweisen. Könnte eines Tages nützlich sein. :) –