Как использовать переменную на стороне сервера в JavaScript с Razor - PullRequest
1 голос
/ 13 июля 2011

У меня есть фрагмент кода в виде

@if (Model.Count() > 0)
{
    var locations = new List<string>();
    var count = 1;
    foreach (var shop in Model)
    {
        locations.Add(string.Format(
                    @"{{
                           title: ""Shop Name: {0}"", 
                           position: new google.maps.LatLng({1}, {2}),
                           icon: ""{3}""
                       }}",
                       shop.ShopName,
                       shop.Location.Latitude,
                       shop.Location.Longitude,
                       count
                    )
                  );

        count++;
    }

    var locationsJson = "[" + string.Join(",", locations.ToArray()) + "]";
}

Как я могу назначить locationJson переменной javascript как

<script type="text/javascript">
    var jsLocations = @locationsJson;
</script>

Ответы [ 3 ]

2 голосов
/ 13 июля 2011

Вместо этого выполните встроенный серверный код на стороне сервера, и тогда вы сможете сделать его свойством модели и сделать что-то вроде:

<script type="text/javascript">

var jsLocations = @Model.locationsJson;

</script>
1 голос
/ 13 июля 2011

У меня есть фрагмент кода в представлении как

У вас никогда не должно быть такого кода в вашем представлении.Попробуйте это (короче, лучше, безопаснее):

<script type="text/javascript">
    var jsLocations = @Html.Raw(Json.Encode(Model));
    $.each(jsLocations, function(index, item) {
        // TODO: do something with the item, for example
        // alert(item.ShopName); or alert(Location.Latitude);
    });
</script>
0 голосов
/ 13 июля 2011

Ваш код будет работать нормально.

Однако вам нужно экранировать значения в вашем JSON, иначе у вас будет дыра в XSS.
Вам следует использовать настоящий сериализатор JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...