ここで<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>
更新:
Scott Guthrieは最近@:
、Razorの構文について投稿しました。これは<text>
、追加するJavaScriptコードが1行または2行しかない場合のタグよりも少し不格好です。次のアプローチは、生成される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
より正確にしました。
明確にするために、呼び出しはC#コードによく似@:
ていますが、Razorを強制的にテキストモードに戻しaddMarker
ます。次に、Razorは@item.Property
構文を取得して、これらのプロパティのコンテンツを直接出力する必要があることを伝えます。
アップデート2
Viewコードは実際にはJavaScriptコードを配置するのに適した場所ではないことに注意してください。JavaScriptコードは静的.js
ファイルに配置し、Ajax呼び出しまたはスキャンによって必要なデータを取得する必要がありますdata-
HTMLから属性をあります。RazorはJavaScriptではなく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);
});
@:
構文に関する私の更新に興味があるかもしれません。