客户端ID是在哪个页面生命周期中生成的?

6

我正在编写程序将WebControls添加到用户控件中,同时添加一个JavaScript事件,并将控件ID作为参数传递,但是客户端ID是我分配的ID,它不包含asp.net生成的ID。

   var txt = new TextBox();
   txt.ID = "MyID"+Number;

   chkBox.Attributes.Add("onClick", "EnableTxtBox('" +txt.ClientID + "');");

我可以通过添加父控件ID来解决这个问题。
   chkBox.Attributes.Add("onClick", "EnableTxtBox('" + this.ClientID+"_"+txt.ClientID + "');");

客户端ID是在哪个页面生命周期中生成的?

客户端ID是Web表单中最让人头疼的事情之一,如果我必须仅提出一个论点来说明MVC框架比Web表单更好,那就是你可以决定ID而不依赖于ASP.net分配任何它想要的东西。 - Chris Marisic
2个回答

8

在添加属性之前,您需要将控件添加到控件层次结构中。

   var txt = new TextBox();
   txt.ID = "MyID"+Number;
   Controls.Add ( txt );
   chkBox.Attributes.Add("onClick", "EnableTxtBox('" +txt.ClientID + "');");

ControlCollection不是普通的集合;当添加控件时,它会通知所有者控件,并且控件可以采取适当的操作。


2

在 OnPreRender() 方法中,您应该能够添加属性。INamingContainer 有时候会让人感到痛苦...


这个解决方案适用于我的情况,因为我有<% %>代码块,不允许将创建的控件添加到this.Controls中。 - Oscar Cabrero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接