ASP.NET MVC 4-Razor в функции Javascript в разделе @вызывает ошибку области видимости
Проблема заключается в том, что размещение переменной C# в функции JS в разделе @приводит к неправильному javascript (только в MVC 4).
В функции JS в MVC 3 Все выполняется, как и ожидалось.
@section test {
<script type="text/javascript">
$(function () {
alert(@DateTime.Now);
});
</script>
}
Возьмите этот же самый код и поместите его в приложение MVC4, и вы получите искаженный JS.
HTML на странице фактически отобразит следующее:
<script type="text/javascript">
$(function () {
alert(12/27/2011 11:04:04 AM);
И html выдаст
); }
Обратите внимание, что закрывающий скрипт тег не производить.
Похоже, что закрывающая фигурная скобка в функции JS путается с закрывающей фигурной скобкой в Razor.
Обратите внимание,что я также объявляю RenderSection("test", false") в моем _Layout.файл cshtml.6 ответов:
Немного старый ответ, но я испытывал ту же проблему, поэтому я представил отчет об отзыве на Microsoft.Соедините, надеюсь, он должен быть отсортирован до полного выпуска.
Https://connect.microsoft.com/VisualStudio/feedback/details/720079/mvc-4-javascript-in-section-issue
Я знаю, что был хитрым с тех пор, как был задан вопрос, но вы также можете попробовать что-то вроде этого.
@section test { <script type="text/javascript"> $(function () { alert(@(DateTime.Now)); }); </script> }
Отметьте "()" после @.
Надеюсь, что это поможет.
Извините, я просто не мог не позвонить сюда... Я не вижу, как синтаксис в исходном вопросе будет работать на самом деле. Когда я пробую его в MVC3, в VS2010, он помещает зеленую волнистую линию под "DateTime", и когда вы наводите на нее курсор, он говорит"условная компиляция выключена". Но если я окружу его кавычками, он действительно работает, как в:
@section test { <script type="text/javascript"> $(function () { alert("@DateTime.Now"); }); </script> }
И затем, когда я запускаю его (F5), он отображает предупреждение JavaScript, как и ожидалось, и когда я просматриваю источник, он отображает:
<script type="text/javascript"> $(function () { alert("07/09/2012 10:41:26"); }); </script>
То, что я в конечном итоге сделал сейчас, было испускание заключительного JS func в @Html.Вид сырья().
Поскольку это так легко воссоздать, я собираюсь отправить это как ошибку в Microsoft.
@section test { <script type="text/javascript"> $(function () { alert(@DateTime.Now); @(Html.Raw("});")) </script> }
Определенно ошибка. Я предпочитаю этот обходной путь тому, который вы опубликовали. По какой-то причине другие элементы razor, похоже, правильно интерпретируют скобки, поэтому я просто обертываю содержимое скрипта в другой набор скобок.
@section test { if (true) { <script type="text/javascript"> $(function () { alert(@DateTime.Now); }); </script> } }