У меня есть повторитель, который связан с несколькими пользовательскими элементами данных / типами
в событии 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 и т. Д., Но я получил похожую проблему.
Может ли кто-нибудь просветить меня?
это из-за порядка элементов управления в? т. е. элемент управления проверкой написан перед редактированием?
или ...
во всяком случае, любая помощь высоко ценится
спасибо
физ