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   5  

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>
}

Я сталкивался с подобными проблемами. Оберните ваше предупреждение в <text></text> теги

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

@section test {
if (true) {
<script type="text/javascript">
    $(function () {
        alert(@DateTime.Now);
    });
</script>
}
}