2008-11-18 33 views
5

tôi đang programatically thêm WebControls vào một User Control i am cũng thêm một sự kiện javascript đi qua các controlID như một tham số nhưng ClientId là một i gán một nó không chứa một trong đó asp.net tạoVòng đời trang nào là ID khách hàng được tạo?

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

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

tôi có thể workaround này bằng cách thêm ID phụ huynh kiểm soát

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

On mà trang cuộc sống chu trình được các ID khách hàng tạo ra?

+0

Id khách hàng là một trong những điều đáng ghét nhất để xử lý trong biểu mẫu web, nếu tôi phải đưa ra 1 lý do tại sao khung MVC tốt hơn nhiều so với biểu mẫu web, nó sẽ là lập luận rằng bạn dictate các id không phụ thuộc vào ASP.net để gán bất cứ điều gì nó cảm thấy như thế nào. –

Trả lời

7

Bạn cần thêm điều khiển vào hệ thống phân cấp kiểm soát trước khi thêm thuộc tính.

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

ControlCollection không phải là bộ sưu tập thông thường; nó thông báo cho chủ sở hữu quyền kiểm soát khi các điều khiển được thêm vào và điều khiển có thể thực hiện các hành động thích hợp.

+0

chỉ hoạt động tốt khi không có <% %> khối mã tồn tại –

2

Bạn sẽ có thể thêm thuộc tính trong OnPreRender(). INamingContainer đôi khi rất đau đớn ...

+0

giải pháp này phù hợp với tôi vì tôi đã có <% %> khối mã và không cho phép tôi thêm điều khiển được tạo vào điều này.Controls Cảm ơn –

Các vấn đề liên quan