элемент управления не может найти свой элемент управления для проверки - PullRequest
2 голосов
/ 29 апреля 2010

У меня есть повторитель, который связан с несколькими пользовательскими элементами данных / типами

в событии itemdatabound для повторителя код вызывает функцию рендеринга, которая в зависимости от пользовательского типа данных будет отображать пользовательский элемент управления. он также (если установлен флаг проверки) будет отображать элемент управления для соответствующего обработанного элемента редактирования

элемент управления для редактирования переопределяет метод CreateChildControls () для пользовательского элемента управления, добавляя таким образом несколько literalControls

protected override void CreateChildControls()
{
    //other bits removed - but it is this 'hidden' control i am trying to validate
    this.Controls.Add(new LiteralControl(string.Format(
                                         "<input type=\"text\" name=\"{0}\" id=\"{0}\" value=\"{1}\" style=\"display:none;\" \">"
                                         , this.UniqueID
                                         , this.MediaId.ToString())
                                         ));
    //some other bits removed
}

элемент управления проверкой выглядит следующим образом: где переданный в editcontrol является экземпляром элемента управления, для которого вышеупомянутый createchildcontrols является методом ..

public override Control RenderValidationControl(Control editControl)
{
    Control ctrl = new PlaceHolder();

    RequiredFieldValidator req = new RequiredFieldValidator();
    req.ID = editControl.ClientID + "_validator";
    req.ControlToValidate = editControl.UniqueID;
    req.Display = ValidatorDisplay.Dynamic;
    req.InitialValue = "0";
    req.ErrorMessage = this.Caption + " cannot be blank";
    ctrl.Controls.Add(req);

    return ctrl;
}

проблема в том, что для элементов управления валидацией свойство .ControlToValidate имеет значение uniqueid элемента editcontrol. когда я попадаю на страницу, я получаю следующую ошибку: Не удалось найти идентификатор элемента управления «FieldRepeater $ ctl01 $ ctl00», на который ссылается свойство «ControlToValidate» поля «FieldRepeater_ctl01_ctl00_validator».

Я попытался изменить литерал в createchildcontrols на новый TextBox (), а затем установить id и т. Д., Но я получил похожую проблему.

Может ли кто-нибудь просветить меня? это из-за порядка элементов управления в? т. е. элемент управления проверкой написан перед редактированием? или ...

во всяком случае, любая помощь высоко ценится

спасибо

физ

1 Ответ

2 голосов
/ 29 апреля 2010

Вы должны использовать editControl.ID, а не editControl.UniqueID

Также учтите, что если editControl должно быть что-то, что можно использовать с обязательным полем vaidator. Этот валидатор не имеет смысла для ВСЕХ элементов управления вводом.

EDIT
Проверьте эту ссылку. Это может быть полезно, поскольку это именно то, что вам нужно
http://support.microsoft.com/kb/310082

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...