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 回答