在服务器控件中动态创建CustomValidator

时间:2012-04-06 16:25:23

标签: c# asp.net telerik custom-validators naming-containers

我有一个自定义服务器控件,它包装了一个RadEditor(基本上是一个textarea)。我试图动态添加一个CustomValidator,但我在初始页面加载时不断收到此错误

  

无法找到引用的控件ID“RadEditor1”   ''。

的'ControlToValidate'属性

这是我在服务器控件中使用的代码,用于创建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);
}

1 个答案:

答案 0 :(得分:1)

问题在于RadEditor实现了INamingContainer,因此ASP.NET最终会在服务器控件的 children 中搜索名为RadEditor1的控件。当然,它不成功,因为RadEditor1没有名为RadEditor1的子控件。

我使用的技巧是选择一个特殊的ID,如"."来表示父控件本身:

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

然后使用"."作为ControlToValidate

validator.ControlToValidate = ".";