Добавление элемента управления восстановлением пароля к подклассу приводит к тому, что «запись с таким же ключом уже существует».ошибка - PullRequest
0 голосов
/ 06 мая 2011

Я пытаюсь создать подкласс управления восстановлением пароля в 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>

Во время выполнения я получаю следующую ошибку:

Ошибка источника по умолчанию: 2: запись с тот же ключ уже существует. Вход с таким же ключом уже существует.

Полная ошибка:

Запись с таким же ключом уже существует. Описание: необработанный исключение произошло во время выполнение текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для более информация об ошибке и где он возник в коде.

Сведения об исключении: System.ArgumentException: запись с таким же ключом уже существует.

Ошибка источника:

Создано необработанное исключение во время исполнения текущего веб-запрос. Информация относительно Происхождение и место исключения можно определить с помощью исключения трассировка стека ниже.

Трассировка стека:

[ArgumentException: запись с тот же ключ уже существует.]
System.Collections.Specialized.ListDictionary.Add (Объект ключ, значение объекта) + 7952083
System.Web.UI.ClientScriptManager.RegisterExpandoAttribute (String controlId, String attributeName, String attributeValue, логическое кодирование) +337 System.Web.UI.ScriptRegistrationManager.RegisterExpandoAttribute (Control control, String controlId, String attributeName, String attributeValue, Логическое кодирование) + 115

Кто-нибудь знает почему? Я подозреваю, что это как-то связано с проверочными элементами в базовом классе элемента управления восстановлением пароля, но я немного растерялся относительно того, как действовать.

Ответы [ 2 ]

0 голосов
/ 09 мая 2011

Не совсем уверен, почему это было проблемой, но в конце концов я обнаружил, что установка режима ClientID элемента управления на AutoID решает проблему. Я подозреваю, что этот элемент управления генерировал элементы управления, имеющие конфликтующие идентификаторы, но я не смог доказать это.

0 голосов
/ 06 мая 2011

Проверьте остальную часть файла aspx, а также файл designer.vb и посмотрите, присутствует ли уже элемент управления с тем же идентификатором.

В качестве альтернативы, установите точку останова непосредственно перед добавлением элемента управления в коллекцию страниц (заполнителей) и рекурсивно опрашивайте элементы управления страницы, чтобы проверить, существует ли уже элемент управления с таким идентификатором.

...