2015-12-11 2 views
0

Я надеюсь, что кто-то может мне помочь, потому что я не могу найти рабочее решение для своей проблемы.

Я кодирую в ASP.NET WebForms с C#. Я использую MasterPage. В этом MasterPage я определяю свои скрипты в ScriptManager.

<asp:ScriptManager ID="smScripts" runat="server"> 
    <Scripts> 
     <asp:ScriptReference Path="~/Scripts/jquery-2.1.1.min.js" /> 
     <asp:ScriptReference Path="~/Scripts/bootstrap.min.js" /> 
     <asp:ScriptReference Path="~/Scripts/printArea.js" /> 
     <asp:ScriptReference Path="~/Scripts/globalFunctions.js" /> 
     <asp:ScriptReference Path="~/Scripts/jquery.browser.min.js" /> 
     <asp:ScriptReference Path="~/Scripts/jquery.reject.js" /> 
    </Scripts> 
</asp:ScriptManager> 

Теперь, если я использую jQuery на любой странице e. г. Default.aspx внутри функции она отлично работает:

<script type="text/javascript"> 
    function Print(options) { 
     $("div.PrintArea").printArea(options); 
    } 
</script> 

Но если я пытаюсь использовать его непосредственно в блоке сценария - например, подождать, пока документ не будет готов - это не работает:

<script type="text/javascript"> 
    $(document).ready(function() { 
     // some code 
    }); 
</script> 

Я получаю сообщение об ошибке «Ошибка выполнения JavaScript:« $ undefined ». Я не знаю, как я могу исправить эту проблему.

Может быть, кто-то может мне помочь? Заранее спасибо.

+0

Возможно, что ваши '

0

Скажем, мы хотим добавить jquery на каждую страницу, поэтому вам нужно включить ссылку на свой скрипт на своей главной странице.

В соответствии с рекомендациями, вы должны поместить все ссылки и скрипты javascript в конец тега html <body>: перед тегом </body>.

Так что в вашем случае, вы должны ссылаться на весь ваш общую JS файла в конце <body> тега, а затем установить раздел так:

<asp:ContentPlaceHolder id="myJsWhatever" runat="server"> 

</asp:ContentPlaceHolder> 

Так на страницах, которые наследуют от главной страницы вы определили все ваши JS в этом разделе, и вы гарантируете, что загрузка jquery будет первой.

Если вы не хотите менять все свои вещи, просто добавьте ссылку jquery в раздел head вашей html-страницы.

+0

Проблема заключается в том, что ScriptManager находится в разделе тела главной страницы. ContentPalceHolder для моей головы находится в главном разделе. Поэтому я думаю, что на странице содержимого голова загружается до того, как загрузится ScriptManager в основной части главной страницы. – CSharper

+0

@CSharper, вам нужно добавить прямую ссылку на js, такую ​​как '' не использовать ScriptManager для такого рода ссылок – Thomas

+0

Теперь я делаю так. И это работает. Но с «~/Scripts/...» страницы содержимого не могут загрузить сценарий. Поэтому я загружаю скрипт непосредственно с моего сервера следующим образом: src = "https: // ...". Может быть, есть лучший способ? Посмотрите также на мой ответ. – CSharper

0

Если я использовать простые теги сценария перед тем ContentPlaceHolder вместо ScriptManager это работает:

<head> 
    <script src="https://.../jquery-2.1.1.min.js" type="text/javascript"></script> 

    <asp:ContentPlaceHolder ID="phHead" runat="server"> 
    </asp:ContentPlaceHolder> 
</head> 

Чтобы обеспечить правильный путь на каждой странице контента я загрузить его прямо с моего сервера вместо использования путь как "~/scripts/...". Может быть, есть лучший способ?

+0

Добавьте скрипт следующим образом: ' ' – Thomas

+0

Если я использую тег скрипта с свойством runat, он не компилируется. Если я использую его без свойства runat, он соответствует, но я получаю следующую ошибку: немецкий оригинал: Die Steuerelementeauflistung kann nicht geändert werden, da das Steuerelement Codeblöcke enthält (z.B. <% ... %>). Английский от Google: список элементов управления не может быть изменен, поскольку элемент управления содержит блоки кода (то есть <% ...%>). – CSharper

+0

@ Томас, может быть, ты поможешь мне еще раз? – CSharper

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