ASP.NET MVC 4 - Бритва внутри функции Javascript в @Section вызывает ошибку области - PullRequest
5 голосов
/ 27 декабря 2011

Проблема заключается в том, что размещение переменной C # в JS-функции внутри @Section приводит к некорректному 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 ]

4 голосов
/ 27 марта 2012

Я знаю, что был хитрым с тех пор, как был задан вопрос, но вы также можете попробовать что-то вроде этого.

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

Обратите внимание на "()" после @.

Надеждаэта помощь.

4 голосов
/ 22 января 2012

Немного старый ответ, но у меня возникла та же проблема, поэтому я отправил отзыв о Microsoft.Connect, надеюсь, он должен быть отсортирован до полного выпуска.

3 голосов
/ 07 сентября 2012

Извините, я просто не мог не перезвонить ... Я не понимаю, как на самом деле будет работать синтаксис в первоначальном вопросе.Когда я пробую это в 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>
2 голосов
/ 28 декабря 2011

То, что я сейчас делал, это испускающий закрывающий JS-функционал в @ Html.Raw ().

Поскольку это так легко воссоздать, я собираюсь отправить это как ошибку в Microsoft.

@section test {
    <script type="text/javascript">
        $(function () {
            alert(@DateTime.Now);
        @(Html.Raw("});"))
    </script>
}
1 голос
/ 28 декабря 2011

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

0 голосов
/ 28 марта 2012

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

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