На каком событии страницы asp.net назначаются идентификаторы клиента? - PullRequest
0 голосов
/ 16 июня 2010

Я хочу сделать что-то вроде этого:

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.

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

Ответы [ 2 ]

0 голосов
/ 16 июня 2010

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

0 голосов
/ 16 июня 2010

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 ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...