Razor derleyicisini tekrar içerik moduna zorlamak için <text>
sözde elemanı, burada açıklandığı gibi kullanın :
<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>
Güncelleme:
Scott Guthrie kısa süre önce Razor'da@:
sözdizimi hakkında bir şeyler yayınladı<text>
. Aşağıdaki yaklaşım muhtemelen tercih edilir, çünkü üretilen HTML'nin boyutunu azaltır. (Boyutu daha da azaltmak için addMarker işlevini statik, önbelleğe alınmış bir JavaScript dosyasına bile taşıyabilirsiniz):
<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>
Aramayı addMarker
daha doğru yapmak için yukarıdaki kod güncellendi .
Açıklığa kavuşturmak için, @:
Razor, addMarker
çağrı C # koduna çok benzese bile metin moduna geri dönüyor . Daha sonra Razor @item.Property
sözdizimini alır ve bu özelliklerin içeriğini doğrudan vermesi gerektiğini söyler.
Güncelleme 2
View code'un JavaScript kodu koymak için gerçekten iyi bir yer olmadığını belirtmek gerekir. JavaScript kodu statik bir .js
dosyaya yerleştirilmeli ve ardından bir Ajax çağrısından veya data-
HTML'den nitelikleri tarayarak ihtiyacı olan verileri almalıdır . JavaScript kodunuzu önbelleğe almayı mümkün kılmanın yanı sıra, Razor HTML için kodlamak için tasarlanmış ancak JavaScript için tasarlanmadığından kodlama ile ilgili sorunları da önler.
Kodu Görüntüle
@foreach(var item in Model)
{
<div data-marker="@Json.Encode(item)"></div>
}
JavaScript kodu
$('[data-marker]').each(function() {
var markerData = $(this).data('marker');
addMarker(markerData.Latitude, markerData.Longitude,
markerData.Description, markerData.Title);
});
@:
sözdizimi ile ilgili güncellememle ilgilenebilirsin .