Добавление элемента управления восстановлением пароля к подклассу приводит к тому, что "запись с таким же ключом уже существует". ошибка
Я пытаюсь создать подкласс управления восстановлением пароля в asp.net (4), чтобы я мог переопределить поведение события OnVerifyingUser, но у меня возникли проблемы с добавлением моего элемента управления восстановлением пароля на страницу. Я попытался создать элемент управления asp:placeholder и добавить в него новый экземпляр моего подкласса, но я просто получаю сообщение об ошибке "Запись с таким же ключом уже существует". Я пытался сделать это в методах page_init и page_load, но получаю ту же ошибку.
Вот пример моего подкласса
Partial Class MyPasswordReminder
Inherits PasswordRecovery
Protected Overrides Sub OnVerifyingUser(e As System.Web.UI.WebControls.LoginCancelEventArgs)
MyBase.OnVerifyingUser(e)
'Do my stuff here
End Sub
End Class
И вот как я добавляю это на страницу.
Private Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init
Dim passwordRecoveryControl As New MyPasswordReminder
passwordRecoveryControl.ID = "passwordRecoveryControl1"
Placeholder1.Controls.Add(passwordRecoveryControl)
End Sub
Код пользовательского интерфейса просто:
<asp:Panel runat="server" ID="pnlMakeDefault" >
<asp:Placeholder ID="Placeholder1" runat="server"/>
</asp:Panel>
Во время выполнения я получаю следующую ошибку:
Ошибка SourceSource: 2: запись с таким же ключом уже существует. Запись с таким же ключом уже существует.
Полная ошибка:
Запись с таким же ключом уже существует. Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.
Сведения об исключении: System.ArgumentException: запись с таким же ключом уже существует.
Ошибка источника:
Во время выполнения текущего веб-запроса было сгенерировано необработанное исключение. Информация о происхождении и местоположении исключения может быть идентифицирована с помощью трассировки стека исключений ниже.
Трассировки стека:
[ArgumentException: запись с таким же ключом уже существует.]
System.Collections.Specialized.ListDictionary.Add (ключ объекта, значение объекта) +7952083
System.Web.ua. 115
Кто-нибудь знает почему? Я подозреваю, что это как-то связано с проверочными элементами в базовом классе элемента управления восстановлением пароля, но я немного растерялся относительно того, как действовать дальше.
2 ответа
Не совсем уверен, почему это было проблемой, но в итоге я обнаружил, что установка режима ClientID элемента управления на AutoID решает проблему. Я подозреваю, что были элементы управления проверки, созданные элементом управления, у которого были конфликтующие идентичности, но я не смог доказать это.
Проверьте остальную часть aspx-файла, а также файл designer.vb и посмотрите, присутствует ли уже элемент управления с тем же идентификатором.
В качестве альтернативы, установите точку останова непосредственно перед добавлением элемента управления в коллекцию страниц (заполнителей) и рекурсивно опрашивайте элементы управления страницы, чтобы узнать, существует ли уже элемент управления с тем же идентификатором.