2009-11-09 2 views
4

У меня есть пользовательский элемент управления с ссылкой «Дополнительная информация». При нажатии этой ссылки я хочу, чтобы появился div, который дает пользователю больше информации.Где разместить JavaScript при использовании пользовательского элемента управления asp.net?

Где разместить JavaScript? Похоже, что это не работает при размещении в верхней части моего пользовательского элемента управления. Как вы обрабатываете JavaScript и jQuery, когда используете пользовательский элемент управления? У меня есть библиотека jQuery, включенная в мою главную страницу. Мои регулярные страницы asp.net имеют JavaScript и эти работы.

EDIT: Кажется, что способ кодирования на стороне клиента в пользовательском элементе управления состоит в том, чтобы выполнять вывод сценария по серверной части, аналогично тому, как работают элементы управления asp.net. Что неутешительно, так это то, что jQuery настолько потрясающий, но все примеры строго внедрены на странице html/aspx. Есть ли ресурс для jQuery с asp.net, который я еще не нашел?

ответ

5

Используйте ClientScriptManager.RegisterStartUpScript, чтобы настроить сценарии в конце страницы на стороне сервера. Или используйте ready event JQuery, чтобы обеспечить загрузку dom, а затем привяжите события вашей клиентской стороны к вашей ссылке.

RegisterStartupScript регистрирует ваши скрипты в конце страницы, поэтому ваш скрипт загружается после загрузки всех элементов страницы.

Еще один вариант - использовать готовое событие JQuery, это поможет вам подождать, пока загрузятся все элементы DOM. Вы можете реализовать свою готовую функцию на встроенной или серверной стороне.

Ключевым моментом здесь является ожидание загрузки элементов DOM.

+1

Ссылка на страницу.RegisterStarUpScript отмечает, что это устарело, и вместо этого вы должны использовать ClientScript.RegisterStartupScript. – chollida

+0

@chollida: Спасибо, ты прав, я хотел быстро ответить :) – Canavar

+0

Итак, ключ для этого при использовании пользовательского элемента управления - вывести скрипт на стороне сервера? – ScottG

0

Вы можете динамически добавлять логику bia backend, но пока ваша страница хоста, на которую вы устанавливаете пользовательский элемент управления, имеет ссылку на указанный js-файл, вы должны быть хорошими.

1

Существует много способов сделать это. Вы можете просто включить javascript в любом месте и настроить событие для этого клика.

Если javascript является частью этого пользовательского элемента управления, и вы хотите, чтобы он был включен в пользовательский элемент управления, вы можете поместить его в веб-ресурс и получить к нему доступ оттуда.

http://bchavez.bitarmory.com/archive/2008/07/28/understanding-scriptresource-and-webresource-in-asp.net.aspx

Вы должны быть в состоянии поставить метки в вашем пользовательском элементе управления также.

+0

У вас есть ссылка на то, где я могу выяснить, как получить к ней доступ в веб-ресурсе? Спасибо – ScottG

+1

Я добавил ссылку на пример использования веб-ресурсов. Это то, что большинство сторонних покупателей приобретает пользовательские элементы управления, поэтому им нужно отправить только DLL, а не кучу скриптов, html, css и т. Д. Файлов. http://bchavez.bitarmory.com/archive/2008/07/28/understanding-scriptresource-and-webresource-in-asp.net.aspx –

+0

Спасибо, Джош, очень ценим! – ScottG

0

Если вы используете usercontrol с кодовым фронтом (ascx), просто установите javascript (jquery?) Там, если нет, то вы можете испускать javascript в html вручную при рендеринге управления (событие Render) или через ClientScript.RegisterStartupScript вместо

1

Я предпочитаю, чтобы поставить ссылку на .js файл, связанный с конкретным управлением в .ascx файла

<script src="Js/myUserControl.js" type="text/javascript"></script> 

EDIT: как примечание, вы можете поместить строку выше в нижней части вашего файла .ascx, чтобы сохранить ссылку вместе с пользовательским элементом управления, а не помещать в файл .aspx.

+0

Я попробую, хотя я не вижу, как привязка к внешнему файлу приведет к другому результату, который просто помещает js inline. Мне нравится этот подход, хотя – ScottG

+1

Мне нравится держать вещи в отдельности - CSS все в .css-файлах, javascript в .js-файлах, все разметки/структуры в файлах ascx/aspx и все классы в файлах .cs - со временем , это упрощает управление/поиск вещей. Простота вашей цели - план всех дополнительных потребностей. –

0

Если вы не хотите жестко закодировать ваш JavaScript для запуска событий, но вместо того, чтобы включить файл JavaScript:

Первый вызов ScriptManager.RegisterClientScriptInclude с пути к файлу сценария, а затем вызвать ScriptManager.RegisterStartupScript с вашей функцией запуска в вашем файле сценария.

protected void Page_Load(object sender, EventArgs e) 
{ 
    ScriptManager.RegisterClientScriptInclude(
     this, GetType(), "formatterScript", ResolveUrl("~/js/formatter.js")); 
    ScriptManager.RegisterStartupScript(
     this, GetType(), "formatTableFunction", "formatTable()", true); 
} 
Смежные вопросы