Usa lo <text>
pseudo-elemento, come descritto qui , per forzare il compilatore Razor nella modalità contenuto:
<script type="text/javascript">
// Some JavaScript code here to display map, etc.
// Now add markers
@foreach (var item in Model) {
<text>
var markerlatLng = new google.maps.LatLng(@(Model.Latitude), @(Model.Longitude));
var title = '@(Model.Title)';
var description = '@(Model.Description)';
var contentString = '<h3>' + title + '</h3>' + '<p>' + description + '</p>'
var infowindow = new google.maps.InfoWindow({
content: contentString
});
var marker = new google.maps.Marker({
position: latLng,
title: title,
map: map,
draggable: false
});
google.maps.event.addListener(marker, 'click', function () {
infowindow.open(map, marker);
});
</text>
}
</script>
Aggiornare:
Scott Guthrie ha recentemente pubblicato un @:
post sulla sintassi in Razor, che è leggermente meno goffo del <text>
tag se hai solo una o due righe di codice JavaScript da aggiungere. Il seguente approccio sarebbe probabilmente preferibile, perché riduce la dimensione dell'HTML generato. (È anche possibile spostare la funzione addMarker in un file JavaScript statico memorizzato nella cache per ridurne ulteriormente le dimensioni):
<script type="text/javascript">
// Some JavaScript code here to display map, etc.
...
// Declare addMarker function
function addMarker(latitude, longitude, title, description, map)
{
var latLng = new google.maps.LatLng(latitude, longitude);
var contentString = '<h3>' + title + '</h3>' + '<p>' + description + '</p>';
var infowindow = new google.maps.InfoWindow({
content: contentString
});
var marker = new google.maps.Marker({
position: latLng,
title: title,
map: map,
draggable: false
});
google.maps.event.addListener(marker, 'click', function () {
infowindow.open(map, marker);
});
}
// Now add markers
@foreach (var item in Model) {
@:addMarker(@item.Latitude, @item.Longitude, '@item.Title', '@item.Description', map);
}
</script>
Aggiornato il codice sopra per rendere la chiamata addMarker
più corretta.
Per chiarire, le @:
forze Razor ritornano in modalità testo, anche se addMarker
call assomiglia molto al codice C #. Razor quindi rileva la @item.Property
sintassi per dire che dovrebbe produrre direttamente il contenuto di tali proprietà.
Aggiornamento 2
Vale la pena notare che il codice Visualizza non è davvero un buon posto per inserire il codice JavaScript. Il codice JavaScript deve essere inserito in un .js
file statico e quindi dovrebbe ottenere i dati necessari da una chiamata Ajax o tramite la scansione degli data-
attributi dall'HTML. Oltre a rendere possibile la memorizzazione nella cache del codice JavaScript, questo evita anche problemi con la codifica, poiché Razor è progettato per codificare per HTML, ma non JavaScript.
Visualizza codice
@foreach(var item in Model)
{
<div data-marker="@Json.Encode(item)"></div>
}
Codice JavaScript
$('[data-marker]').each(function() {
var markerData = $(this).data('marker');
addMarker(markerData.Latitude, markerData.Longitude,
markerData.Description, markerData.Title);
});
@:
sintassi.