如何使用RenderControl注册回发事件?

时间:2009-04-06 14:58:31

标签: c# asp.net event-handling

我在字符串构建器中使用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的方法或类似的东西。有没有办法实现我想做的事情?

2 个答案:

答案 0 :(得分:1)

对于任何类型的事件挂钩,

Render / RenderControl通常会迟到。请尝试使用PreRender。

答案 1 :(得分:1)

为了让您的下拉菜单能够接收事件,它必须作为控件存在于某个控件的集合中。它也可能需要一个唯一的ID(取决于许多情况)。

现在,您将下拉列表的渲染html写为文本。它可能有也可能没有doPostBack功能。如果确实如此,框架无法处理它,因为无法控制。

由于TreeNode没有Controls集合,您可以尝试尝试添加一个隐藏的下拉列表,以您的方式呈现其余部分并以这种方式欺骗框架。但是,这很棘手,因为您必须处理验证,可见性,ID等。

您也可以尝试自己处理回发事件。假设你正确地形成了__doPostBack,在页面加载时检查Request.Form [“__ EVENTTARGET”]和Request.Form [“__ EVENTARGUMENT”]并相应地处理。

您也可以尝试创建自己的树视图...