Gunakan <text>
elemen pseudo, seperti dijelaskan di sini , untuk memaksa kompiler Razor kembali ke mode konten:
<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>
Memperbarui:
Scott Guthrie baru-baru ini memposting tentang @:
sintaks di Razor, yang sedikit kurang kikuk daripada <text>
tag jika Anda hanya memiliki satu atau dua baris kode JavaScript untuk ditambahkan. Pendekatan berikut mungkin lebih disukai, karena mengurangi ukuran HTML yang dihasilkan. (Anda bahkan dapat memindahkan fungsi addMarker ke file JavaScript cache yang statis untuk mengurangi ukurannya):
<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>
Diperbarui kode di atas untuk membuat panggilan menjadi addMarker
lebih benar.
Untuk memperjelas, @:
kekuatan Razor kembali ke mode teks, meskipun addMarker
panggilan sangat mirip dengan kode C #. Razor kemudian mengambil @item.Property
sintaks untuk mengatakan bahwa itu harus langsung mengeluarkan konten dari properti itu.
Perbarui 2
Perlu dicatat bahwa kode Tampilan sebenarnya bukan tempat yang baik untuk meletakkan kode JavaScript. Kode JavaScript harus ditempatkan dalam .js
file statis , dan kemudian harus mendapatkan data yang dibutuhkan baik dari panggilan Ajax atau dengan memindai data-
atribut dari HTML. Selain memungkinkan untuk me-cache kode JavaScript Anda, ini juga menghindari masalah dengan pengkodean, karena Razor dirancang untuk menyandikan untuk HTML, tetapi bukan JavaScript.
Lihat Kode
@foreach(var item in Model)
{
<div data-marker="@Json.Encode(item)"></div>
}
Kode JavaScript
$('[data-marker]').each(function() {
var markerData = $(this).data('marker');
addMarker(markerData.Latitude, markerData.Longitude,
markerData.Description, markerData.Title);
});
@:
sintaksis.