динамическая регистрация jquery не работает

Я хочу динамически зарегистрировать jquery-скрипт на мастер-странице, но он не работает, кто-нибудь может мне помочь?

Я получил сценарий в папке «Материалы/скрипты» из корня моего веб-приложения, и моя главная страница выглядит так:

public partial class Application : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "jquery",
            VirtualPathUtility.ToAbsolute("~/Materials/Scripts/jquery-1.4.2.min.js"));
    }     
}

Но это никогда не работает. С использованием

<script src="../../Materials/Scripts/jquery-1.4.2.min.js" type="text/javascript"></script>

работает отлично.


person AGuyCalledGerald    schedule 08.09.2010    source источник
comment
Мне любопытно, почему вы пытаетесь зарегистрировать его динамически. Вы пытаетесь загружать и выгружать клиентские скрипты в зависимости от того, какую страницу посещают люди? Или есть другая причина для этого?   -  person JasCav    schedule 08.09.2010
comment
@Jas - потому что относительные пути неправильно обрабатываются на главных страницах для файлов сценариев.   -  person Nick Craver    schedule 08.09.2010
comment
хороший вопрос. Я думаю, что в моем проекте мне это особо не нужно, но я видел этот метод в другом нашем проекте, и в целом я думаю, что у вас больше контроля над скриптами.   -  person AGuyCalledGerald    schedule 08.09.2010
comment
Попробуйте заменить VirtualPathUtility.ToAbsolute( на ResolveUrl(   -  person Nick Craver    schedule 08.09.2010
comment
Нет, тоже не помогает, спасибо за ответ.   -  person AGuyCalledGerald    schedule 08.09.2010


Ответы (1)


Когда вы используете ScriptManager для добавления ссылки на скрипт, он добавляет тег SCRIPT к BODY страницы HTML вместо раздела HEAD. Если у вас есть какой-либо код jquery, работающий на $(document).ready(), он не будет работать, потому что jQuery еще не загружен.

Просмотрите HTML-код, сгенерированный страницей aspx, и посмотрите, где находится ваш код jQuery и где находится тег <script>, ссылающийся на jQuery.

Один из способов обойти это — добавить свой javascript внизу документа вместо HEAD.

Другой вариант, если вы все еще хотите сохранить свой код в HEAD, — использовать window.onload вместо $(document).ready(), например:

window.onload = function() {
 ... your jquery code here
}
person Jose Basilio    schedule 08.09.2010
comment
Упс, динамическая регистрация скрипта действительно работает, но НЕ на мастер-странице. Я получаю ошибку JS, если пытаюсь выполнить там скрипт. Скрипт находится в теле страницы. - person AGuyCalledGerald; 08.09.2010