использование одного пользовательского контроля дважды на одной странице имеет проблемы с конфликтом имен - PullRequest
2 голосов
/ 13 декабря 2011

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

html-элементы в usercontrol также будут показывать те же идентификаторы, из-за чего getElementById не работает в javascript

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

1 Ответ

6 голосов
/ 14 декабря 2011

Чтобы избежать проблем с идентификаторами, вы можете заставить свой элемент управления реализовывать интерфейс 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";
    }
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...