Есть нестандартный элемент управления. Как из него добратся до <HEAD> родительской страницы во время CreateChildControls(), чтобы туда что-то написать?
(_2B || !_2B)
Re: Как писать в <HEAD>?
От:
Аноним
Дата:
29.06.05 14:35
Оценка:
Здравствуйте, Daenur, Вы писали:
D>Есть нестандартный элемент управления. Как из него добратся до <HEAD> родительской страницы во время CreateChildControls(), чтобы туда что-то написать?
Здравствуйте, Аноним, Вы писали:
D>>Есть нестандартный элемент управления. Как из него добратся до <HEAD> родительской страницы во время CreateChildControls(), чтобы туда что-то написать?
А>добавить к нему runat="server"
И что? А дальше? Вообще-то, т.к. это нестандартный элемент управления, то он УЖЕ объявлен как runat="server". Такой код:
D>добавляет запись в <FORM>. Хотелось бы писать в <HEAD>. Как это сделать-то?
В общем случае — регистрируешь яваскрипт который меняет head. Иначе придется прописывать <head> родительской страницы как runat="server" и производить с ним манипуляции.
And please don't stick Thy servants, Lord, in a Rotissomat.
Здравствуйте, Gollum, Вы писали:
G>В общем случае — регистрируешь яваскрипт который меняет head. Иначе придется прописывать <head> родительской страницы как runat="server" и производить с ним манипуляции.
Это ясно, только не подходит
Хотелось бы писать в <HEAD> из создающегося нестандартного элемента управления. Т.е. он сам себя типа регистрирует: прописывает пути к своим скриптам, etc. А если
...прописывать <head> родительской страницы как runat="server"...
то надо быть точно уверенным, что так и будет сделано на каждой странице, куда поместят этот элемент. Иначе при this.Page.Controls["Head"] м.б. ошибки.
Здравствуйте, Daenur, Вы писали:
D>Есть нестандартный элемент управления. Как из него добратся до <HEAD> родительской страницы во время CreateChildControls(), чтобы туда что-то написать?
Здравствуйте, Daenur, Вы писали:
D>то надо быть точно уверенным, что так и будет сделано на каждой странице, куда поместят этот элемент. Иначе при this.Page.Controls["Head"] м.б. ошибки.
В этом случае деллается Assert, проверка того что это действительно так, иначе сразу отлуп
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re: Как писать в ?
От:
Аноним
Дата:
21.07.05 13:35
Оценка:
Мне кажется, что этот способ не будет работать, если:
Это все будет работать только если родительская страница будет иметь <HEAD> как runat="server". А этот контрол могут поместить на любую страницу и забыть, что надо явно указать runat="server" в aspx. Но контрол должен прописать информацию в <HEAD> в любом случае. Именно по этой причине я и делаю так:
protected override void CreateChildControls() // метод моего контрола
{
string body = ((LiteralControl)this.Page.Controls[0]).Text;
int position = body.IndexOf("<body ") + 6;
((LiteralControl)this.Page.Controls[0]).Text =
body.Insert(position, "onload='onLoad()' ");
...
}
и это должно работать в большинстве случаев, т.к. this.Page.Controls[0] — это обычный html заголовка любой aspx-страницы (если его никто не менял . А на случай если автоматически сгенерированный при создании <HEAD> был все-таки изменен, то надо добавить проверку. Например, на существование события onLoad (to Corwin_XX аноним
Здравствуйте, Davader, Вы писали:
D>кстати, вопрос по теме: надо вставить скрипт, обрабатывающий onchange и onfocus для юзерного контрола, в тэг <body> можно это сделать?
Здравствуйте, Daenur, Вы писали:
D>Здравствуйте, Davader, Вы писали:
D>>кстати, вопрос по теме: надо вставить скрипт, обрабатывающий onchange и onfocus для юзерного контрола, в тэг <body> можно это сделать?
D>И после всего написанного еще не ясно?!
нет, мне ж не в хеад надо написать! и не в боди... надо дописать в генерящийся по ходу скрипт.
Здравствуйте, Davader, Вы писали:
D>>И после всего написанного еще не ясно?!
D>нет, мне ж не в хеад надо написать! и не в боди... надо дописать в генерящийся по ходу скрипт.
Здравствуйте, Daenur, Вы писали:
D>Есть нестандартный элемент управления. Как из него добратся до <HEAD> родительской страницы во время CreateChildControls(), чтобы туда что-то написать?
Здравствуйте, Daenur, Вы писали:
D>Здравствуйте, Davader, Вы писали:
D>>нет, мне ж не в хеад надо написать! и не в боди... надо дописать в генерящийся по ходу скрипт.
D> Не совсем понял... Подробнее скажи, что уже есть и что надо...
тема в том, что есть составной юзерный контрол — аналог DropDownList. Надо, чтою в него в процессе добавлялись строчки по эвенту (SelectIndexChanged). Это реализованно. Но проблема в том, что они исчают после постбека. Причина — на клиентскую страницу не прописывается их добавление. Если во время исполнения написать в скрипт, который добавляет строки, добавление новых — я думаю, всё заработает. Я нашёл такую тему: document.scripts[номер].text = "новый текст", но это не помогает. Постбек — и всё по default'у. Если есть у кого-нить мысли — буду очень благодарен.