0

RadEditor(基本的にはテキストエリア)をラップするカスタムサーバーコントロールがあります。CustomValidatorを動的に追加しようとしていますが、最初のページロードでこのエラーが発生し続けます

''の'ControlToValidate'プロパティによって参照されるコントロールID'RadEditor1'が見つかりません。

これは、CustomValidatorを作成するためにサーバーコントロール内で使用しているコードです。

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);
}
4

1 に答える 1

1

問題は、をRadEditor実装することです。そのINamingContainerため、ASP.NETは、サーバーコントロールのの中から、という名前のコントロールを検索することになりますRadEditor1。もちろん、RadEditor1という名前の子コントロールがないため、失敗しRadEditor1ます。

"."私が使用するトリックは、親コントロール自体を意味するような特別なIDを選択することです。

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

次に、として使用"."しますControlToValidate

validator.ControlToValidate = "."; 
于 2012-04-06T16:37:27.360 に答える