Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Добавить динамический скрипт в страницу с masterpa 
:(
    Опции темы
maque
Дата 20.6.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



Доброе время суток. Имеется веб-сайт. Каждая страница сайта имеет masterpage. В одной из страниц для тега body нужно установить в свойстве onkeyup обработчик на яве-скрипт. Этот обработчик в свою очередь создается динамически при загрузке страницы. Но у страниц нет тега body, а только <asp:content>, внутри которого и лежит содержимое страницы. 

ВОПРОС: Каким образом мне воткнуть в результирующую страницу, которая отправляется клиенту, скрипт(динамический), который будет вызываться при нажатии клавиши, например, "Enter", притом, что страница использует masterpage?
PM MAIL   Вверх
Mymik
Дата 20.6.2007, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



как я понял, у тебя уже есть JS-функция, которая обрабатывает событие нажатия клавиши.
По поводу прикрепления событие...
Могу предложить такой способ. Есть в asp.net такой класс как ClientScript и у него есть метод RegisterStartupScript(). 
Код

Page.ClientScript.RegisterStartupScript();

JS который туда будет записан, будет добавлен в самый конец документа. Твоя функция должна быть определена где-то выше по ходу html кода.
Код, который ты должен будешь записать в Page.ClientScript.RegisterStartupScript(); будет выглядить примерно вот так вот -->>
Код

if(document.all)
    /* Для IE */
    document.body.onkeyup = function(){alert(window.event.keyCode);}
else
    /* Для FF */
    window.onkeyup = function(event){alert(event.keyCode);};

Естественно вместо моего alert(event.keyCode) ты должен будешь вписать вызов своей функции и передать ей нужные тебе пораметры...


Это сообщение отредактировал(а) Mymik - 20.6.2007, 12:18


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
maque
Дата 20.6.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



Mymik, спасибо.
Далее, имеется гридвью, который выводит в таблице данные из таблицы БД.  Условно говоря, имена и фамилии пользователей.
Рядом с каждой строкой есть кнопка "Редактировать". При нажатии на нее появляются 2 линкбаттона, ("принять" и "отменить"), а поля фамилий и пользователей становятся редактируемыми. Так вот задача: чтобы при нажатии на "Enter" нажимался линкбаттон "принять", а на Esc - "отменить". Для этого я пишу динамический клиентский скрипт, в котором просто вызывается dopostback, в его параметры я записываю clientID линкбаттона(используя Grid.EditIndex).  Собс-но, куда воткнуть-то регистрацию этого скрипта? Если в Page_Load, то выдается ошибка:
Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index.

PM MAIL   Вверх
Mymik
Дата 20.6.2007, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



maque, а можно увидеть как ты генерируешь этот скрипт ??? ты его через ClientScript генерируешь или как-то по другому ???
Та ошибка что ты показал мне, говорит о том что ты пытаешься достучаться к твоему GridView к страницы которой не существует...


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
maque
Дата 21.6.2007, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



Делаю так:
Код

void Positions_RowEditing(object sender, GridViewEditEventArgs e)
    {
        PositionsGrid.EditIndex = e.NewEditIndex;

        if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "PositionsShortCut"))
        {
            StringBuilder jscript = new StringBuilder();
            jscript.Append("<script type=text/javascript> function cl(ev) {");
            jscript.Append("if(ev.keyCode == 13) { __doPostBack('" + PositionsGrid.Rows[PositionsGrid.EditIndex].FindControl("OkBtn").ClientID + "','') }");
            jscript.Append("} </script>");
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "PositionsShortCut", jscript.ToString(), false);
        }

        this.BindGridView(false, false);
    }


Так вот, опять проблема: EditIndex-то я взял, но вот ClientID кнопки OkBtn взять не могу, ибо RowEditing происходит До того, как появляются элементы OkBtn и CancelBtn, соотв. Выдается ошибка null reference. Поэтому, есть ли обработчики, которые вызываются уже после того, как произойдет рендеринг страницы, но до того, как она отправится пользователю?

Это сообщение отредактировал(а) maque - 21.6.2007, 10:34
PM MAIL   Вверх
SiTox_
Дата 21.6.2007, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 76
Регистрация: 30.12.2006
Где: Riga

Репутация: нет
Всего: 2



может вставить свой http модуль? 
PM MAIL   Вверх
Mymik
Дата 21.6.2007, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



maque, Не генерируй скрипт PostBack'а как ты это делаешь, это не есть правильно. Есть стандартные средства
Код

Page.ClientScript.GetPostBackEventReference();

Возвращает строчку. Очень советую посмотреть этот метод. В принципе возвращает то же самое что и ты генерируешь, но при этом если вдруг что-то поменяется в .NET то тебе не нужно будет переписывать все это руками.

А что по поводу темы. То в 4 строчку твоего кода вставь
Код

PositionsGrid.BindDate();




--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
maque
Дата 23.6.2007, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.8.2006

Репутация: нет
Всего: нет



Цитата(Mymik @ 21.6.2007,  21:57)
Код

PositionsGrid.BindDate();

BindDate() msdn не знает...
PM MAIL   Вверх
Mymik
Дата 23.6.2007, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1474
Регистрация: 12.5.2006
Где: Lamer-центер

Репутация: 50
Всего: 78



maque,  smile да я тут совсем уже зарапортовался, конечно же DataBind()...  smile 


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.