gcogco10 Ответов: 2

Неперехваченная синтаксическая ошибка, как исправить эту проблему?


Привет Команда

У меня есть отладка моего кода, я испытываю эту проблему неперехваченной синтаксической ошибки. Пожалуйста, помогите мне решить эту проблему, возможно, мне не хватает какой-то библиотеки javascript, пожалуйста, посоветуйте мне и помогите товарищам.

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.SqlClient;
using System.Configuration;

namespace eNtsaRegistrationTraining.Controllers
{
    public class MapsController : Controller
    {
        // GET: Maps
        public ActionResult GoogleMaps()
        {
            string markers = "[";
            string conString = ConfigurationManager.ConnectionStrings["eNtsaRegistration"].ConnectionString;
            SqlCommand cmd = new SqlCommand("SELECT * FROM dbo.Locations");
            using (SqlConnection con = new SqlConnection(conString))
            {
                cmd.Connection = con;
                con.Open();
                using(SqlDataReader sdr = cmd.ExecuteReader())
                {
                    while(sdr.Read())
                    {
                        markers += "{";
                        markers += string.Format("'title': '{0}',", sdr["Name"]);
                        markers += string.Format("'lat:' '{0}',", sdr["Latitute"]);
                        markers += string.Format(" 'lng': '{0}',", sdr["Longitute"]);
                        markers += string.Format("'description': '{0}'", sdr["Description"]);
                        markers += "},";
                    }
                }
                con.Close();
            }

            markers += "];";
            ViewBag.Makers = markers;

            return View();
        }
    }
}


{
    ViewBag.Title = "GoogleMaps";
    Layout = null;
}

<pre lang="Javascript"><!DOCYTPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width"/>
    <title>eNtsa Office Location</title>
</head>
<body>
    <div id="dvMap" style="width: 500px; height: 500px">
    </div>
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyB9vzf41FPK5l9NX0wCFgx_x873YuSq9KQ"></script>
    <script type="text/javascript">
        var markers = @Html.Raw(ViewBag.Markers);
        window.onload = function () {
            var mapOptions = {
                center: new google.maps.LatLng(markers[0].lat, markers[0].lng),
                zoom: 8,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            var infoWindow = new google.maps.InfoWindow();
            var map = new google.maps.Map(document.getElementById("dvMap"), mapOptions);
            for (i = 0; i < markers.length; i++) {
                var data = markers[i]
                var myLatlng = new google.maps.LatLng(data.lat, data.lng);
                var marker = new google.maps.Marker({
                    position: myLatlng,
                    map: map,
                    title: data.title
                });
                (function (marker, data) {
                    google.maps.event.addListener(marker, "click", function (e) {
                        infoWindow.setContent(data.description);
                        infoWindow.open(map, marker);
                    });
                })(marker, data);
            }
        }
    </script>
</body>

</html>

Richard MacCutchan

Где происходит ошибка?

gcogco10

var markers = @Html.Raw(ViewBag.Маркера);

Jon McKee

Что Видовой мешок.Маркера сдерживать? Похоже, что это массив, и в этом случае я почти уверен, что вам не нужно @HTML-код.Сырье() потому что все, что это делает,-это предотвращает кодировку Razor по умолчанию для строк, оборачивая некодированную строку в IHtmlString. На самом деле я не уверен, что произойдет, если вы передадите ему не-строку.

gcogco10

Я опускаю поставить логику для моего контроллера, я вызываю с помощью маркера из контроллера, что переменная обращается к этим полям, как было объявлено контроллером.

2 Ответов

Рейтинг:
2

Jon McKee

ViewBag.Makers = markers;

Это может быть вашей проблемой. Вершители должно быть Маркера. Таким образом, ваш javascript, вероятно, рендеринг выглядит следующим образом var markers = ; вызывает синтаксическую ошибку.


gcogco10

Спасибо Джон, теперь я получаю этот Неперехваченный TypeError: не могу прочитать свойство 'lat' undefined
в window.onload (GoogleMaps:19) центр: новый google.maps.LatLng(markers[0].lat, markers[0].lng), имя, которое я определил там внутри контроллера. Пожалуйста, совет

Jon McKee

"'lat:' '{0}'," должно быть "'lat': '{0}'," Одиночная цитата находится в неправильном месте.

Я также замечаю, что то, как вы объединяете объекты, вы в конечном итоге получите дополнительное", " в конце. Экс: [ { .... }, { .... },] Таким образом, вам может потребоваться удалить этот последний символ, прежде чем делать это markers +="];".

Что-то вроде этого должно сработать:

let commaIndex = markers.lastIndexOf(",");
if (commaIndex > 0) {
  markers = markers.substring(0, commaIndex);
}

gcogco10

Спасибо, приятель, я удалил dbo.Местоположения должны быть фактически только именем таблицы "местоположения". Теперь мои карты плохо загружаются и не знаю почему. пожалуйста помогите

Jon McKee

Это база данных с одной схемой? Если он работал со схемой там, зачем его удалять? Никогда не помешает быть конкретным, даже если есть только одна схема.

gcogco10

Это единая схема базы данных

Jon McKee

Не уверен, что смогу вам помочь. Я не очень хорошо знаком с API google maps. Вероятно, вам следует либо опубликовать отдельный вопрос, либо обновить его с помощью любой ошибки или другой информации, которую вы получаете обратно из API google maps. Я уверен, что кто-то здесь знаком с этим и может знать, что происходит не так.

gcogco10

Спасибо Джон

Рейтинг:
0

Richard Deeming

Не пытайтесь построить строку JSON вручную. Вместо того, чтобы создать набор объектов, а затем использовать правильный формат JSON сериализатор, чтобы генерировать JSON-файла.

Модель:

public class Marker
{
    public string title { get; set; }
    public double lat { get; set; }
    public double lng { get; set; }
    public string description { get; set; }
}
Действие:
public ActionResult GoogleMaps()
{
    var markers = new List<Marker>();
    
    string conString = ConfigurationManager.ConnectionStrings["eNtsaRegistration"].ConnectionString;
    using (var con = new SqlConnection(conString))
    using (var cmd = new SqlCommand("SELECT Name, Latitude, Longitude, Description FROM dbo.Locations", con))
    {
        con.Open();
        using (var sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
        {
            while (sdr.Read())
            {
                markers.Add(new Marker
                {
                    title = Convert.ToString(sdr["Name"]),
                    lat = Convert.ToDouble(sdr["Latitude"]),
                    lng = Convert.ToDouble(sdr["Longitude"]),
                    description = Convert.ToString(sdr["Description"]),
                });
            }
        }
    }

    ViewBag.Markers = markers;
    return View();
}
Смотреть:
<script>
var markers = @Html.Raw(Json.Encode(ViewBag.Markers));


gcogco10

Спасибо, Ричард, за вызов, который я сейчас получаю. Это приложение не показывает мое текущее местоположение на карте. Что я мог упустить, расположение его указывало за пределами континента(Африка). Это должно быть точка на SA(Порт-Элизабет)

Richard Deeming

Должно быть, что-то не так с вашими координатами. Я подозреваю, что вы ошиблись знаком на своей широте - Google ожидает Градусы Севера, поэтому вам нужно будет использовать -33.9608.

gcogco10

Хорошо отмечено, но я внес поправки, используя эту логику выше. Я получаю этот центр ошибок: новый google.maps.LatLng(маркеры[0].lat, маркеры[0].lng),
zoom: 8,Uncaught TypeError: не удается прочитать свойство '0' из null

Richard Deeming

Ну, эта ошибка звучит так, как будто вы на самом деле не выводите никаких маркеров. Вы действительно исправили орфографию с Makers к Markers как заметил Джон, не так ли?

Взгляните на источник страницы из Вашего браузера, чтобы увидеть, что это такое. markers переменная имеет значение.