Чтобы избежать проблем с идентификаторами, вы можете заставить свой элемент управления реализовывать интерфейс INamingContainer.Это маркерный интерфейс, который просто сообщает ASP.NET, что элементы управления внутри должны иметь префикс родительского идентификатора в своих идентификаторах клиента.Больше информации здесь .
Что касается ValidationGroup, я вижу два варианта.Сначала определите публичную собственность для вашего контроля.Установите его в разметке (убедитесь, что он отличается для каждого из ваших элементов управления на Master), и в обработчике PreRender элемента управления установите его программно для каждого валидатора и т. Д.
public partial class MyLoginControl : Control
{
...
public string ValidationGroup
{
get; set;
}
...
protected void Page_PreRender(object sender, EventArgs e)
{
RequredValidator1.ValidationGroup = this.ValidationGroup;
}
...
}
Второй подход в основном такой же, новместо публичной собственности вы можете использовать идентификатор элемента управления:
public partial class MyLoginControl : Control
{
...
protected void Page_PreRender(object sender, EventArgs e)
{
RequredValidator1.ValidationGroup = this.ID + "ValidationGroup";
}
...
}