использование одного пользовательского элемента управления дважды на одной странице имеет проблемы с конфликтом имен

Я сделал элемент управления входом в систему, у которого есть ValidationGroup. Я дважды использовал этот элемент управления на главной странице. Однако при проверке будут проверены оба элемента управления. Мне нужно, чтобы он проверял только поля, содержащиеся в нем...

HTML-элементы в пользовательском элементе управления также будут отображать те же идентификаторы, что заставило getElementById не работать в javascript.

Мне интересно, как избежать таких конфликтов? Спасибо.


person shrimp rice    schedule 13.12.2011    source источник
comment
Возможно, вам будет полезен мой ответ на другой SO-вопрос: stackoverflow.com/questions/6443516/   -  person Tim Schmelter    schedule 14.12.2011


Ответы (1)


Чтобы избежать проблем с идентификаторами, вы можете сделать так, чтобы ваш элемент управления реализовывал интерфейс INamingContainer. Это интерфейс маркера, который просто сообщает ASP.NET, что элементы управления внутри должны иметь префикс родительского идентификатора в своих идентификаторах клиентов. Подробнее здесь.

Что касается ValidationGroup, я вижу два варианта. Во-первых, определите общедоступное свойство для вашего элемента управления. Установите его в разметке (убедитесь, что он отличается для каждого из ваших элементов управления на Мастере), а в обработчике элемента управления 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";
    }
    ...
}
person Andrei    schedule 13.12.2011