Використовуйте <text>
описаний тут псевдоелемент , щоб змусити компілятор Razor повернутися в режим вмісту:
<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>
Оновлення:
Скотт Гетрі нещодавно опублікував про @:
синтаксис у Razor, який трохи менш незграбний, ніж <text>
тег, якщо вам достатньо додати один або два рядки коду JavaScript. Наступний підхід, ймовірно, буде кращим, оскільки він зменшує розмір створеного HTML. (Ви навіть можете перемістити функцію addMarker до статичного кешованого файлу JavaScript для подальшого зменшення розміру):
<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>
Оновлено вищевказаний код, щоб зробити дзвінок addMarker
більш правильним.
Для уточнення, @:
примушує Бритву повернутись у текстовий режим, навіть якщо addMarker
виклик дуже нагадує код C #. Потім Razor підбирає @item.Property
синтаксис, щоб сказати, що він повинен безпосередньо виводити вміст цих властивостей.
Оновлення 2
Варто відзначити, що код перегляду насправді не найкраще місце для розміщення коду JavaScript. Код JavaScript повинен бути розміщений у статичному .js
файлі, а потім він повинен отримати ті дані, які йому потрібні, або з виклику Ajax, або шляхом сканування data-
атрибутів з HTML. Окрім можливості кеш-коду JavaScript, це також дозволяє уникнути проблем із кодуванням, оскільки Razor призначений для кодування HTML, але не JavaScript.
Переглянути код
@foreach(var item in Model)
{
<div data-marker="@Json.Encode(item)"></div>
}
JavaScript-код
$('[data-marker]').each(function() {
var markerData = $(this).data('marker');
addMarker(markerData.Latitude, markerData.Longitude,
markerData.Description, markerData.Title);
});
@:
синтаксису.