2009-02-01 2 views
17

Включенные ссылки на скрипт, в частности jQuery, отображаются после состояния просмотра. Есть ли способ получить это в голове <?Как получить страницу.ClientScript.RegisterClientScriptInclude для включения в голову?

Page.ClientScript.RegisterClientScriptInclude("jQuery", "/scripts/jquery.js"); 

Я пытаюсь зарегистрировать jquery.js на странице загрузки пользовательского элемента управления.

Заранее благодарен!

P.S. Если это невозможно сделать (с помощью ClientScript), у кого-нибудь есть идея, почему они не создали его?

UPDATE

Основной особенностью менеджера ClientScript мне нужно является возможность включать только скрипт один раз. Элемент управления может появляться много раз на странице, но мне нужен только один сценарий jQuery:

ответ

22

непосредственно inlcude его в ГОЛОВЕ:

HtmlGenericControl Include = new HtmlGenericControl("script"); 
Include.Attributes.Add("type", "text/javascript"); 
Include.Attributes.Add("src", sInclude); 
this.Page.Header.Controls.Add(Include); 

, вы бы хотели проверить, чтобы его не было, прежде чем добавлять его.

+0

Еще один отлично действующий метод, минуя PlaceHolder, который я использовал. –

+0

Спасибо, Glennular, что проверка на уникальность кажется полезным бит ClientScript – ccook

+0

После многого. Это идеальный ответ. – siddhusingh

8

У меня была эта проблема некоторое время назад, и в итоге я не использовал RegisterClientScriptInclude.

Я разместил местозаполнитель в заголовке страницы и добавил тег сценария к заполнителю через HtmlGenericControl.

Я посмотрю, смогу ли найти свой код, и я отредактирую свой ответ с ним.

EDIT

Я не мог найти свой код, так что я просто заново создал его:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <asp:PlaceHolder runat="server" ID="HeadPlaceHolder"></asp:PlaceHolder> 
</head>  
<body> 
    ... 
</body> 
</html> 

И код Behind:

protected void Page_Load(object sender, EventArgs e) 
{ 
    HeadPlaceHolder.Controls.Add(/* Your control here */); 
} 
+0

Спасибо! Да, все, что я читаю там, указывает, что это не отразится в голове. – ccook

+0

Это было прекрасно - заполнитель полезен для поиска скриптов именно там, где вы хотите в голове, в основном просто для аккуратности. Я также использовал отдельный для таблиц стилей. Подход Page.Header.Controls.Add только добавляется к концу, поэтому все имеет тенденцию к смешению. С PlaceHolder скрипты сгруппированы; таблицы стилей сгруппированы. – goodeye

1

Похоже, что использовать page.ClientScript для добавления скриптов в заголовок страницы.

3

Эй, старый вопрос, но, возможно, это по-прежнему представляет интерес для кого-то.

Я создаю собственный UserControl с .net 3.5sp1, столкнулся с теми же проблемами. Следующее решение работает для меня.

Этот код из UserControl класса:

protected void Page_Init(object sender, EventArgs e) 
{ 
    const string scriptKey = "UserControlScript"; 

    if(!Page.ClientScript.IsClientScriptIncludeRegistered(Page.GetType(), scriptKey)) 
    { 
     Page.ClientScript.RegisterClientScriptInclude(Page.GetType(), scriptKey, ResolveClientUrl("~/js/UserControl.js")); 
    } 
} 

Я использовал Page_Init, потому что мне нужно сделать некоторые инициализации, что должно быть сделано, прежде чем Page_Load гнездовой страницы называется.

Смежные вопросы