MVC3 Javascript не работает со страницы - PullRequest
1 голос
/ 11 июля 2011

Это на самом деле не критическая проблема, я просто не понимаю, почему это не работает. Я использую mvc3 для веб-приложения, и у меня есть скрипт global.js, который я включаю в заголовок _Layout. Работает просто отлично.

У меня есть одна страница, на которой гораздо больше JS, поэтому я не хочу включать все это в глобальный файл. Проблема в том, что JavaScript работает только тогда, когда он находится на странице, внизу, в тегах сценария. Если я помещу JS в его собственный файл и использую тег src скрипта, либо на странице, либо в _Layout, JS не запустится. Это обнаруживается в источнике, хотя.

Я даже пробовал двигать фигуры. Если функция или обработчик перемещается со страницы в свой собственный файл, эта часть не будет работать. Неподвижные секции продолжают работать.

Без изменений в коде. Если я просто вытаскиваю его со страницы, помещаю в отдельный файл и делаю ссылку на него, код больше не работает. Обе функции регистрируются с помощью $ (document) .ready (function ()). Разве два сценария не могут сделать это? Единственное, о чем я могу думать, это то, что страницы тела (отрисованные из _Layout's @RenderBody ()) не могут ссылаться на скрипты.

Ответы [ 2 ]

2 голосов
/ 12 июля 2011

Как вы ссылаетесь на эти внешние файлы js? Вы должны использовать URL-помощники, чтобы обеспечить правильные пути к ним:

<script src="@Url.Content("~/Scripts/myscript.js")" type="text/javascript"></script>

Теперь внутри этого внешнего myscript.js, в зависимости от того, ссылались ли вы на него в разделе <head> или в конце перед закрытием </body>, следует использовать $(document).ready или нет.

Что вы можете сделать, это определить секцию scripts в _Layout.cshtml:

    ...
    <script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>        
    @RenderSection("scripts", false)
</body>

, который может использоваться каждым представлением для включения его определенных сценариев:

@section scripts {
    <script src="@Url.Content("~/Scripts/myscript.js")" type="text/javascript"></script>
}

и, наконец, внутри myscript.js вы можете напрямую манипулировать DOM без включения document.ready:

$('form').submit(function() {
    alert('submitting a form');
});

Вы можете включить столько внешних сценариев, сколько захотите (хотя вам следует сократить их количество до строгого минимума, чтобы избежать дополнительных HTTP-соединений согласно рекомендациям YSlow )

0 голосов
/ 12 июля 2011

Я просто предполагаю, что в вашем JavaScript есть опечатка.Попробуйте загрузить страницу с помощью Firebug или Chrome и посмотреть журнал ошибок;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...