我遇到了动态创建并插入页面的Web Control的问题。我创建了几个LinkButton,具体取决于所做的搜索数据,我正在尝试为每个按钮添加一个事件处理程序,因此它会过滤结果。
控件已正确初始化,但事件永远不会被触发。
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
Controls.Clear()
Dim btn As Controls.LocalizableLinkButton
For Each element As Generic.KeyValuePair(Of String, ResultFilterData) In m_list
btn = New LocalizableLinkButton
btn.ID = m_Name & "$lnk" & count
btn.Label = element.Value.Label.Append(" (" + CStr(element.Value.Count) + ")")
btn.CommandArgument = element.Value.Key
AddHandler btn.Click, AddressOf Me.btn_Click
Controls.Add(btn)
Next
End Sub
由于此代码位于Page_Init中,因此应在回发时重新创建所有控件。 (LocalizableLinkButton只是LinkButton的扩展,用于向文本添加多语言功能)。
问题是从不调用方法btn_Click。链接按钮在回调上正确初始化,具有与以前相同的ID。但事件并没有发生。
我正在使用ASP.Net 2.0
有什么想法吗?
答案 0 :(得分:2)
我终于找到了ASP.NET使用Link Buttons的问题。
错误是在每个LinkButton的ID中使用'$'符号。 ASP.NET显然在创建Postback Javascript时使用$ sign来构建控件层次结构。因此,它认为LinkButtons嵌套在不存在的控件中。所以事件当然不会被解雇。
一旦我删除了$ sign,它就能正常工作。
答案 1 :(得分:0)
您可能希望将这段代码放在Page_Load中并查看。通常建议不要访问此Page_Init中的控件,因为无法保证在此阶段创建控件。
我不是VB人,但我把它放到default.aspx的代码隐藏中,它运行正常。
protected void Page_Load(object sender, EventArgs e)
{
Button button = new Button();
button.Click += new EventHandler(button_Click);
button.Text = "test";
Form.Controls.Add(button);
}
void button_Click(object sender, EventArgs e)
{
throw new NotImplementedException();
}