2011-12-27 8 views
5

Problem polega na tym, że umieszczenie zmiennej C# w obrębie funkcji JS w obrębie @Section powoduje powstanie nieprawidłowego javascript (tylko w MVC 4).ASP.NET MVC 4 - Razor w ramach funkcji JavaScript w obrębie @ Section Powoduje błąd zakresu

W funkcji JS w MVC 3 wszystko jest wykonywane zgodnie z oczekiwaniami.

@section test { 

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

Podaj ten sam kod i umieść go w aplikacji MVC4, a otrzymasz zniekształcony JS.

HTML na stronie rzeczywiście czynią, co następuje:

<script type="text/javascript"> 
    $(function() { 
     alert(12/27/2011 11:04:04 AM); 

i html wyemituje

); }

Uwaga: znacznik skryptu zamykającego nie jest tworzony.

Wygląda na to, że zamknięcie nawiasu klamrowego w funkcji JS jest mylone, ponieważ jest to nawias klamrowy w grze Razor.

Zauważ, że ja również uznającej RenderSection („test” false ") w moim _Layout.cshtml pliku.

+0

Wow, ten wpis sprawił, że dowiedziałem się o mvc4 ... –

Odpowiedz

1

Widziałem problemów, takich jak ten. Owiń powiadomienie oświadczenie w <text></text> tagów

+0

To była moja pierwsza myśl. Próbowałem go tak samo jak składnia @:, ale nie rozwiązałem problemu z zasięgiem. –

2

Co skończyło się robi teraz został emitowania zamykający JS func w @ Html.Raw().

Ponieważ jest to tak łatwe do odtworzenia, mam zamiar przedstawić to jako błąd do firmy Microsoft.

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

wiem były wile skoro padło pytanie, ale można też spróbować czegoś takiego.

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

Uwaga "()" po znaku @.

Mam nadzieję, że ta pomoc.

0

Zdecydowanie błąd. Wolę to obejście od tego, które opublikowałeś. Z jakiegoś powodu inne elementy brzytwy poprawnie interpretują nawiasy, więc po prostu zawijam zawartość skryptu w innym zestawie nawiasów klamrowych.

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

Niestety, ja po prostu nie mógł pomóc, ale kurant tutaj ... Ja nie wiem, jak składnia w początkowym pytaniu faktycznie działa. Kiedy próbuję go w MVC3, w VS2010, umieszcza zieloną falującą linię pod "DateTime", a po najechaniu na nią, mówi "Kompilacja warunkowa jest wyłączona".Ale jeśli otaczają go w cudzysłowie, to działa, jak w:

@section test { 

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

A potem, kiedy go uruchomić (F5) wyświetla alert JavaScript, zgodnie z oczekiwaniami, a kiedy zobaczyć źródło renderuje:

<script type="text/javascript"> 
    $(function() { 
     alert("07/09/2012 10:41:26"); 
    }); 
</script> 
Powiązane problemy