Динамическое создание CustomValidator в управлении сервером

У меня есть собственный серверный элемент управления, который оборачивает RadEditor (в основном текстовое поле). Я пытаюсь добавить CustomValidator к нему динамически, но я продолжаю получать эту ошибку при начальной загрузке страницы

Не удалось найти идентификатор элемента управления '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 ответ

Решение

Проблема в том, что RadEditor инвентарь INamingContainerТаким образом, ASP.NET начинает поиск среди дочерних элементов управления вашего сервера для элемента управления с именем RadEditor1, Конечно, это неудачно, потому что RadEditor1 не имеет дочернего элемента управления с именем RadEditor1,

Уловка, которую я использую, состоит в том, чтобы выбрать специальный идентификатор, такой как "." означать сам родительский контроль:

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

Тогда используйте "." как ControlToValidate:

validator.ControlToValidate = "."; 
Другие вопросы по тегам