Старый вопрос, но я недавно занимался этим, так, чтобы дать ответ Тима немного больше разъяснения и прояснить немного дезинформации:
Если вы используете RegisterClientScriptBlock как вы просите, то ваши скрипты будут вывод в ClientScriptManager.RenderClientScriptBlocks, который вызывается во время Page.BeginFormRender, но он фактически вызывается формой, а не самой страницей.
Вот последовательность:
- Page.ProcessRequestMain (когда он достигает секцию рендеринга) вызывает
- (Пейдж базового класс) Control.RenderControl который называет
- Control.RenderChildren, который перебирает все ребенок управления и в конечном итоге вызывает
- HtmlForm.RenderControl который вызывает
- HtmlForm.RenderChildren что то, что мы заботимся о
С Рефлектор:
protected internal override void RenderChildren(HtmlTextWriter writer)
{
Page page = this.Page;
if (page != null)
{
page.OnFormRender();
page.BeginFormRender(writer, this.UniqueID);
}
base.RenderChildren(writer);
if (page != null)
{
page.EndFormRender(writer, this.UniqueID);
page.OnFormPostRender();
}
}
Примечание вызовы page.BeginFormRender и page.EndFormRender. Между ними форма называется базой. RenderChildren, которая в конечном итоге вызовет метод Render в пользовательском элементе управления пользователя. Поэтому, чтобы быть верным исходному вопросу, вы не можете взаимодействовать с частью скриптов ClientScriptBlocks в любое время во время последовательности Render любого дочернего элемента управления, поскольку они уже были переданы в поток Response. Вы можете указать : добавьте скрипты в этот блок во время последовательности Render, если вы находитесь в методе рендеринга страницы, прежде чем вызвать base.Render, как упоминает Тим, но это не работает в дочернем элементе управления любого типа.
Если Рендер последовательность все, что вы должны работать с (это ситуация, которую я нахожусь в), то вы можете использовать ClientScript.RegisterStartupScript во время вашего контроля визуализирует, как RenderClientStartupScripts вызываются во время page.EndFormRender, что происходит после того, как вашим элементам управления предлагается визуализировать, как вы можете видеть в приведенном выше коде.
Он спросил об этом в WebControl, поэтому вы не можете сделать это во время Render.Если вы переопределили Render на странице, тогда да, ваше предложение «или» должно быть выполнено – sliderhouserules 2008-12-29 22:17:19