0

我想做这样的事情:

Panel divPanel = new Panel();
divPanel.ID = "divPanel";
this.Page.Controls.Add(divPanel);


string script = "function alertID(){alert("the id is: "+divPanel.ClientID+");}";
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "scripttests", script);

但是当我把这段代码放在page_load中时,我没有得到完整的id,即ctl00_ContentMain_divPanel,我只是得到了divPanel。

我应该使用另一个事件吗?我该如何进行这项工作?

4

2 回答 2

0

PreRender 很好,但它也应该在 Page_Load 中工作。

http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientid(VS.71).aspx

您的脚本渲染代码是否也在 page_load 中运行?在上面的示例中它们在一起,但也许它们只是复制/粘贴在一起?

如果此代码在自定义控件中,您还需要将 INamingContainer 接口添加到控件声明中,以便 ClientID 按预期工作:

http://msdn.microsoft.com/en-us/library/system.web.ui.inamingcontainer.aspx

此外,如果这是一个自定义控件,您应该添加到控件本身的 Controls 集合中,而不是包含页面。即: this.Controls.Add() 而不是 this.Page.Controls.Add()

于 2010-06-15T20:18:39.930 回答
0

在您的示例中,您将直接添加到 Page 控件集合中。这意味着客户端 ID 应该是 divPanel。也许您期望的客户端 ID 不正确。

于 2010-06-15T20:26:18.700 回答