Мне кажется, что на форуме много сообщений / ответов на эту тему, но я не приблизился к решению.
Я загружаю повторяющуюся структуру данных из БД в элементы управления UpdatePanel в обработчике событий.Количество повторов варьируется, поэтому все элементы управления создаются и добавляются на панель контейнера динамически.Пользователь имеет возможность редактировать данные, поэтому я также динамически создаю элементы управления валидатора (RegularExpressionValidator
s)
Проблема заключается в установке свойства ControlToValidate валидатора.Независимо от того, как я установил это, я получаю сообщение об ошибке Unable to find control id '...' referenced by the 'ControlToValidate' property of '...'
от сервера, которое затем вызывается ASP.NET AJAX JS.
Краткая версия кода добавления элемента управления выглядит следующим образом:
TextBox licenseCode = new TextBox();
licenseCode.ID = this.getNextId(); // generated ID contains only [A-Za-Z], [0-9], :, -, .
licenseCode.MaxLength = 50;
this.purchaseEdit.Controls.Add(licenseCode); // this.purchaseEdit is an asp:Panel
RegularExpressionValidator licenseCodeVal = new RegularExpressionValidator();
licenseCodeVal.ControlToValidate = licenseCode.ClientID;
licenseCodeVal.ID = this.getNextId();
licenseCodeVal.ValidationGroup = this.purchaseEditSave.ValidationGroup; // save button within the panel
licenseCodeVal.ValidationExpression = @"^.{1," + licenseCode.MaxLength.ToString() + "}$";
licenseCodeVal.ErrorMessage = "Between 1 and " + licenseCode.MaxLength.ToString() + " chars.";
this.purchaseEdit.Controls.Add(licenseCodeVal);
Как видно, оба элемента управления добавляются в один и тот же контейнер, валидатор добавляется после TextBox, а для свойства ControlToValidate в настоящее время установлено значение ClientID элемента TextBox.Я тоже пробовал значение идентификатора, но без радости.
Действительно раздражает то, что если я не добавлю валидатор и с помощью точки останова проверю ClientID в TextBox, я могу проверить DOMобновите страницу и найдите атрибут ID TextBox:
<input type="text" id="ctl00_ContentBody_PCTL::4890cc3a-8d07-4dee-aa9f-bdd8735fcaf8::licCode"... />
Насколько я могу судить, я не делаю ничего плохого, так почему я получаю эту ошибку ??
Любойпредложения высоко ценится.