Как писать в <HEAD>?
От: Daenur Россия  
Дата: 29.06.05 11:36
Оценка:
Есть нестандартный элемент управления. Как из него добратся до <HEAD> родительской страницы во время CreateChildControls(), чтобы туда что-то написать?
(_2B || !_2B)
Re: Как писать в <HEAD>?
От: Аноним  
Дата: 29.06.05 14:35
Оценка:
Здравствуйте, Daenur, Вы писали:

D>Есть нестандартный элемент управления. Как из него добратся до <HEAD> родительской страницы во время CreateChildControls(), чтобы туда что-то написать?


добавить к нему runat="server"
Re[2]: Как писать в <HEAD>?
От: Daenur Россия  
Дата: 30.06.05 06:36
Оценка:
Здравствуйте, Аноним, Вы писали:

D>>Есть нестандартный элемент управления. Как из него добратся до <HEAD> родительской страницы во время CreateChildControls(), чтобы туда что-то написать?


А>добавить к нему runat="server"


И что? А дальше? Вообще-то, т.к. это нестандартный элемент управления, то он УЖЕ объявлен как runat="server". Такой код:

this.Page.RegisterClientScriptBlock("MyControlScript",
                    @"<script src=""include\MyControl.js""></script>");


добавляет запись в <FORM>. Хотелось бы писать в <HEAD>. Как это сделать-то?
(_2B || !_2B)
Re[3]: Как писать в <HEAD>?
От: Gollum Россия  
Дата: 30.06.05 07:01
Оценка:
Здравствуйте, Daenur, Вы писали:

D>
D>this.Page.RegisterClientScriptBlock("MyControlScript",
D>                    @"<script src=""include\MyControl.js""></script>");
D>


D>добавляет запись в <FORM>. Хотелось бы писать в <HEAD>. Как это сделать-то?


В общем случае — регистрируешь яваскрипт который меняет head. Иначе придется прописывать <head> родительской страницы как runat="server" и производить с ним манипуляции.
And please don't stick Thy servants, Lord, in a Rotissomat.
Eugene Agafonov on the .NET

Re[4]: Как писать в <HEAD>?
От: Daenur Россия  
Дата: 30.06.05 09:51
Оценка:
Здравствуйте, Gollum, Вы писали:

G>В общем случае — регистрируешь яваскрипт который меняет head. Иначе придется прописывать <head> родительской страницы как runat="server" и производить с ним манипуляции.


Это ясно, только не подходит

Хотелось бы писать в <HEAD> из создающегося нестандартного элемента управления. Т.е. он сам себя типа регистрирует: прописывает пути к своим скриптам, etc. А если

...прописывать <head> родительской страницы как runat="server"...


то надо быть точно уверенным, что так и будет сделано на каждой странице, куда поместят этот элемент. Иначе при this.Page.Controls["Head"] м.б. ошибки.

Все равно спасибо за помощь.
(_2B || !_2B)
Re: Как писать в <HEAD>?
От: Daenur Россия  
Дата: 21.07.05 12:04
Оценка:
В общем все-таки решил эту проблему. Немного некрасиво, зато работает

protected override void CreateChildControls()
        {
            // Регистрируем скрипт
            if (! this.Page.IsStartupScriptRegistered("MyScript"))
                this.Page.RegisterClientScriptBlock("MyScript",
                    @"<script src=""include\MyScript.js""></script>");

            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()' ");

            ...
        }


Таким образом можем писать в любое место заголовка.
(_2B || !_2B)
Re: Как писать в <HEAD>?
От: Red Bird Россия  
Дата: 21.07.05 13:28
Оценка:
Здравствуйте, Daenur, Вы писали:

D>Есть нестандартный элемент управления. Как из него добратся до <HEAD> родительской страницы во время CreateChildControls(), чтобы туда что-то написать?


По пробуйте сделать, например, так.

aspx:
<HEAD>
    <title runat="server" id="ctrlTitle"></title>
.........................................................................
</HEAD>


C#:
/// <summary>
/// Control для управления тегом title
/// </summary>
public System.Web.UI.HtmlControls.HtmlGenericControl ctrlTitle;
...............................................................
...............................................................
//
// Установим заголовок окна
//
ctrlTitle.InnerHtml = "заголовок окна";
Re[5]: Как писать в <HEAD>?
От: mogadanez Чехия  
Дата: 21.07.05 13:34
Оценка:
Здравствуйте, Daenur, Вы писали:

D>то надо быть точно уверенным, что так и будет сделано на каждой странице, куда поместят этот элемент. Иначе при this.Page.Controls["Head"] м.б. ошибки.


В этом случае деллается Assert, проверка того что это действительно так, иначе сразу отлуп
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Re: Как писать в ?
От: Аноним  
Дата: 21.07.05 13:35
Оценка:
Мне кажется, что этот способ не будет работать, если:

1. Тэг body не имеет параметров: <body>

2. Тэг body уже имеет параметр onload.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[2]: Как писать в <HEAD>?
От: Daenur Россия  
Дата: 26.07.05 06:39
Оценка:
Здравствуйте, Red Bird, Вы писали:

...

Это все будет работать только если родительская страница будет иметь <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 аноним

ЗЫ. Если кто знает способы красивше — пишите
(_2B || !_2B)
Re[2]: Как писать в ?
От: Аноним  
Дата: 26.07.05 06:50
Оценка: 1 (1)
Может так:

StringBuilder script = new StringBuilder();
script.Append("<script language\"javascript\">");
script.AppendFormat("document.title = '{0}'", "My title");
script.Append("</script>");
Page.RegisterStartupScript("titleChange", script.ToString());





данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
RE: Re[2]: Как писать в ?
От: Аноним  
Дата: 26.07.05 12:17
Оценка:
Это не будет работать для поисковиков
Раб, который обожает своего хозяина, уже не раб, а холуй.
В.И. Ульянов.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: RE: Re[2]: Как писать в ?
От: Davader Россия  
Дата: 28.07.05 12:24
Оценка:
кстати, вопрос по теме: надо вставить скрипт, обрабатывающий onchange и onfocus для юзерного контрола, в тэг <body> можно это сделать?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Как писать в ?
От: Daenur Россия  
Дата: 02.08.05 06:10
Оценка:
Здравствуйте, Corwin_XX, Вы писали:

C_X>Может так:


...

Тоже вариант
(_2B || !_2B)
Re[3]: Как писать в ?
От: Daenur Россия  
Дата: 02.08.05 06:12
Оценка:
Здравствуйте, Davader, Вы писали:

D>кстати, вопрос по теме: надо вставить скрипт, обрабатывающий onchange и onfocus для юзерного контрола, в тэг <body> можно это сделать?


И после всего написанного еще не ясно?!
(_2B || !_2B)
Re[4]: Как писать в ?
От: Davader Россия  
Дата: 03.08.05 13:11
Оценка:
Здравствуйте, Daenur, Вы писали:

D>Здравствуйте, Davader, Вы писали:


D>>кстати, вопрос по теме: надо вставить скрипт, обрабатывающий onchange и onfocus для юзерного контрола, в тэг <body> можно это сделать?


D>И после всего написанного еще не ясно?!


нет, мне ж не в хеад надо написать! и не в боди... надо дописать в генерящийся по ходу скрипт.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Как писать в ?
От: Daenur Россия  
Дата: 03.08.05 14:06
Оценка:
Здравствуйте, Davader, Вы писали:

D>нет, мне ж не в хеад надо написать! и не в боди... надо дописать в генерящийся по ходу скрипт.


Не совсем понял... Подробнее скажи, что уже есть и что надо...
(_2B || !_2B)
Re[5]: Как писать в ?
От: Gollum Россия  
Дата: 04.08.05 08:16
Оценка:
Здравствуйте, Davader, Вы писали:

D>>И после всего написанного еще не ясно?!


D>нет, мне ж не в хеад надо написать! и не в боди... надо дописать в генерящийся по ходу скрипт.


RegisterClientScriptBlock, RegisterStartupScript ?
Декадентство — это лежать на пляже у Великого Блинского болота и смотреть телевизор. В смокингах.
Eugene Agafonov on the .NET

Re: Как писать в <HEAD>?
От: Iliya_P  
Дата: 04.08.05 08:25
Оценка:
Здравствуйте, Daenur, Вы писали:

D>Есть нестандартный элемент управления. Как из него добратся до <HEAD> родительской страницы во время CreateChildControls(), чтобы туда что-то написать?


страница:
<body id="htmlBody" runat=server>


контрол:
HtmlGenericControl htmlBody = (HtmlGenericControl)Page.FindControl("htmlBody");
htmlBody.Attributes.Add("OnLoad", onloadEvent );
Re[6]: Как писать в ?
От: Davader Россия  
Дата: 04.08.05 13:07
Оценка:
Здравствуйте, Daenur, Вы писали:

D>Здравствуйте, Davader, Вы писали:


D>>нет, мне ж не в хеад надо написать! и не в боди... надо дописать в генерящийся по ходу скрипт.


D> Не совсем понял... Подробнее скажи, что уже есть и что надо...


тема в том, что есть составной юзерный контрол — аналог DropDownList. Надо, чтою в него в процессе добавлялись строчки по эвенту (SelectIndexChanged). Это реализованно. Но проблема в том, что они исчают после постбека. Причина — на клиентскую страницу не прописывается их добавление. Если во время исполнения написать в скрипт, который добавляет строки, добавление новых — я думаю, всё заработает. Я нашёл такую тему: document.scripts[номер].text = "новый текст", но это не помогает. Постбек — и всё по default'у. Если есть у кого-нить мысли — буду очень благодарен.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.