我正在尝试对 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
UI代码很简单:
<asp:Panel runat="server" ID="pnlMakeDefault" >
<asp:Placeholder ID="Placeholder1" runat="server"/>
</asp:Panel>
在运行时我收到以下错误:
DefaultSource 错误:2:已存在具有相同键的条目。已存在具有相同键的条目。
完整错误:
已存在具有相同键的条目。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.ArgumentException:已存在具有相同键的条目。
源错误:
在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
堆栈跟踪:
[ArgumentException: 已存在具有相同键的条目。]
System.Collections.Specialized.ListDictionary.Add(Object key, Object value) +7952083
System.Web.UI.ClientScriptManager.RegisterExpandoAttribute(String controlId, String attributeName, String attributeValue,布尔编码)+337 System.Web.UI.ScriptRegistrationManager.RegisterExpandoAttribute(控制控件,字符串 controlId,字符串属性名,字符串属性值,布尔编码)+115
有谁知道为什么?我怀疑这与密码恢复控件的基类中的验证控件有关,但我对如何进行有点不知所措。