2010-06-15 4 views
0

Я хочу сделать что-то вроде этого:На какое событие страницы asp.net назначены идентификаторы клиента?

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, я не получаю полный идентификатор, который ctl00_ContentMain_divPanel, я просто получить divPanel.

Есть ли другое событие, которое я должен использовать? Как это сделать?

ответ

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() вместо этого.Page.Controls.Add()

+0

Я попробовал Page_PreRender во-первых, но он все еще дает мне только divPanel – user191272

+0

обновил ответ с дополнительной информацией – David

+0

Спасибо за помощь! Пример действительно урезан, фактический код намного больше. Я узнал, что реальным ответом было использование события CreateChildControls. – user191272

0

В вашем примере вы добавляете непосредственно в коллекцию управления страницами. Это означает, что идентификатор клиента должен быть divPanel. Возможно, идентификатор клиента, который вы ожидаете, будет неправильным.

 Смежные вопросы

  • Нет связанных вопросов^_^