我在字符串构建器中使用RenderControl在asp:TreeView中添加下拉列表。我的下拉列表设置为autopostback,我在附加的SelectedIndexChanged上有一个事件。不幸的是,我看到我的下拉列表正确填充在我的树视图中,但更改选择不会引发事件。
这是我的代码:
DropDownList ddlTest = new DropDownList();
ddlTest.Items.Add("test");
ddlTest.Items.Add("test2");
ddlTest.AutoPostBack = true;
ddlTest.SelectedIndexChanged += ddlTest_SelectedIndexChanged;
TreeNode node = new TreeNode();
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter writer = new HtmlTextWriter(sw);
ddlTest.RenderControl(writer);
node.Text = sb.ToString();
node.ShowCheckBox = false;
在下拉列表中没有RegisterEvent的方法或类似的东西。有没有办法实现我想做的事情?
答案 0 :(得分:1)
Render / RenderControl通常会迟到。请尝试使用PreRender。
答案 1 :(得分:1)
为了让您的下拉菜单能够接收事件,它必须作为控件存在于某个控件的集合中。它也可能需要一个唯一的ID(取决于许多情况)。
现在,您将下拉列表的渲染html写为文本。它可能有也可能没有doPostBack功能。如果确实如此,框架无法处理它,因为无法控制。
由于TreeNode没有Controls集合,您可以尝试尝试添加一个隐藏的下拉列表,以您的方式呈现其余部分并以这种方式欺骗框架。但是,这很棘手,因为您必须处理验证,可见性,ID等。
您也可以尝试自己处理回发事件。假设你正确地形成了__doPostBack,在页面加载时检查Request.Form [“__ EVENTTARGET”]和Request.Form [“__ EVENTARGUMENT”]并相应地处理。
您也可以尝试创建自己的树视图...