У меня есть настраиваемый серверный элемент управления, который содержит три текстовых поля. Мне нужно проверить его содержимое с помощью проверок полей ASP.NET.Проверка текстового поля в Server Control с использованием RequiredFieldValidator
Я установил 'ControlToValidate' свойство RequiredFieldValidator для свойства ID моего текстового поля, но похоже, что валидатор не может найти это текстовое поле. Вот упрощенный код, что я пытаюсь сделать (поля и свойства, которые не используются в настоящее время опущены):
[DefaultProperty("Text")]
[ToolboxData("<{0}:ServerControl runat=server></{0}:ServerControl>")]
public class CommentServerControl : WebControl, IPostBackDataHandler
{
private TextBox _textBoxName;
private RequiredFieldValidator _requiredName;
protected override void OnInit(EventArgs e)
{
var idName = "Name-" + UniqueID;
_textBoxName = new TextBox();
_textBoxName.ID = idName;
_textBoxName.ClientIDMode = System.Web.UI.ClientIDMode.Static;
_textBoxName.ValidationGroup = ValidationGroup; // is set up via mark up
Controls.Add(_textBoxName);
_requiredName = new RequiredFieldValidator();
_requiredName.ID = "RequiredName-" + UniqueID;
_requiredName.ValidationGroup = ValidationGroup;
_requiredName.ErrorMessage = RequiredMessage; // is set up via mark up
_requiredName.ControlToValidate = _textBoxName.ID;
Controls.Add(_requiredName);
}
public string ValidationGroup
{
get
{
var s = (string)ViewState["ValidationGroup"];
return (s ?? string.Empty);
}
set
{
ViewState["ValidationGroup"] = value;
}
}
public string RequiredMessage
{
get
{
var s = (string)ViewState["RequiredMessage"];
return (s ?? string.Empty);
}
set
{
ViewState["RequiredMessage"] = value;
}
}
}
Running этот код, я получаю сообщение об ошибке «Не удается найти идентификатор элемента управления» Name -ctl00 $ MainContent $ ctl00 ', на которое ссылается свойство ControlToValidate' RequiredName '. '
Я читал, что это может произойти из-за того, что элементы управления имеют различный NamingContainer, но в этом случае ссылки на NamingContainer одинаковы. Однако, Метод FindControl (string id) не может найти мой элемент управления textbox в методе OnInit. Что я делаю не так? Заранее спасибо.
Примечание: использование UniqueID для создания идентификатора используется для предотвращения коллизий при многократном использовании моего элемента управления.
Слишком рано для чего?) Я вручную инициализирую и добавляю элементы управления в коллекцию, а затем могу их найти, но не используя метод * FindControl * (это, к сожалению, означает, что средство проверки поля не может сделать то же самое). Однако я переместил элементы управления в обработчик OnLoad - ошибка остается. – Eadel