9

Я работаю над проектом ASP.net 4, MVC4 (RC) с помощью visual studio 11. Я пытаюсь отобразить представление Razor MVC4, которое отображает частичный вид. У меня есть некоторый javascript, необходимый для моего частичного просмотра. На моем частичном представлении, когда я включаю свой javascript внутри раздела скриптов, как показано ниже, он, похоже, не загружается.MVC4 частичный просмотр javascript bundling Issue

@section Scripts { 
    <script type="text/javascript"> 
     $(function() { 
      alert("test"); 
     }); 
    </script> 
} 

Если удалить раздел скриптов он терпит неудачу, как библиотеки Jquery (которые сгруппированные и оказываемые на моей странице _Layout.cshtml) еще не загружен при запуске документа готового кода.

<script type="text/javascript"> 
    $(function() { 
     alert("test"); 
    }); 
</script> 

код _layout Страница загрузки JQuery библиотеки

@Scripts.Render("~/bundles/jquery") 
@RenderSection("scripts", required: false) 

Кто-нибудь знает решение для этого, или я просто буду об этом неправильно? Это разрушает мою голову!

ответ

10

Не обернуть сценарий в document.ready в парциальное:

@section Scripts { 
    <script type="text/javascript"> 
     alert("test"); 
    </script> 
} 

Ах, и не ставить скрипты частичными. Код Javascript должен быть помещен в отдельные файлы javascript. Если вы хотите выполнить некоторый javascript, когда часть загружена, вы просто вытесняете этот скрипт в повторно используемую функцию/плагин, который вы вызываете, после того как ваша частичная загрузка будет загружена.

+0

Спасибо за ответ, но это не сработало для меня. Даже при удалении документа. Когда я смотрю на источник страницы, javascript полностью отсутствует. Если я переместил javascript в его родительский вид (который не является частичным представлением), он загрузится. Но я действительно нуждаюсь в этом на присмотре прихода. – martin

+0

Наконец-то это заработало. Когда я создал страницу со сценариями – martin

+3

Очень забавно, что вы нашли проблему @martin, и он отметил свой собственный ответ, даже если ваше решение было правильным решением. : D – Samuel

4

Наконец-то это получилось. Я удалил свой javascript из своего частичного представления и поместил его в родительском представлении (которое не является частичным) в разделе сценария. Этот раздел сценариев был создан автоматически при создании представления с помощью лесов (Create) и был помещен в конец стр. Чтобы заставить это работать, я должен был перенести его в начало страницы - перед вызовом сделать частичное.

2

ClientDependency решает именно эту проблему и позволяет добавлять ссылки на сценарии к частичным представлениям, которые свертываются и помещаются в конце страницы (или там, где вы указываете) для вас. Он также занимается связыванием, версированием и мини-настройкой по страницам.

Накладные расходы на обеспечение ссылки на скрипт на «родительский» вид, а не на частичный, меня не беспокоят, но клиентская зависимость может быть полезна, если у вас есть частичные части, требующие их собственного скрипта и CSS.

+0

. Ниже приведен более мелкий и расширенный метод расширения, который решает специфическую проблему скриптов в частичном: http://blog.logrythmik.com/post/A-Script-Block-Templated-Delegate-for-Inline-Scripts-in-Razor-Partials – peter3

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