简体   繁体   中英

Data not coming from JsonResult Action to Javascript Script

As the title says, i am not able to get and use data from Database in my javascript. I have a Controller in which i have my Database Context Constructor and a JsonResult Action, in which the information comes as it should, but when i'm trying to use data in the javascript it comes as null i believe. Here is my Controller:

namespace ProiectColectiv.Controllers
{
    public class AdminMapController : Controller
    {
        private readonly ProiectColectivContext _context;

        public AdminMapController(ProiectColectivContext context)
        {
            _context = context;
        }

        public ActionResult AdminMap(User user)
        {
            return View("~/Views/Home/AdminMap.cshtml", user);
        }

        public JsonResult GetAllLocation()
        {
            var data = _context.Parkings.ToList();
            return Json(data);
        }
    }
}

Here is my .cshtml with the javascript:

@*@model ProiectColectiv.Models.Parking*@
@{
    ViewData["Title"] = "Admin Map";
}
<br/>
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="initial-scale=1.0">
    <meta charset="utf-8">
    <style>
      /* Always set the map height explicitly to define the size of the div
       * element that contains the map. */
        #map {
            height: 800px;
            width: 1200px;
        }

    </style>    
</head>
<body>
<div id="map"></div>
<script>
    var map;
    function initMap() {
        map = new google.maps.Map(document.getElementById('map'), {
            center: { lat: 46.770920, lng: 23.589920},
            zoom: 13
        });

        $.get("@Url.Action("GetAllLocation","AdminMap")", function (data, status) {
            var marker = [];
            var contentString = [];
            var infowindow = [];
            for (var i = 0; i < data.length; i++) {

                marker[i] = new google.maps.Marker({ position: { lat: parseFloat(data[i].Latitudine), lng: parseFloat(data[i].Longitudine) }, map: map });

                contentString[i] = '<div id="content">' +
                    '<div id="siteNotice">' +
                    '</div>' +
                    '<h1 id="firstHeading" class="firstHeading">'+ data[i].Name+'</h1>' +
                    '<div id="bodyContent">' +
                    '<p><b>' + data[i].Name +'</b>, also referred to as <b>Ayers Rock</b>, is a large ' +
                    'sandstone rock formation in the southern part of the ' +
                    'Northern Territory, central Australia. It lies 335&#160;km (208&#160;mi) ' +
                    'south west of the nearest large town, Alice Springs; 450&#160;km ' +
                    '(280&#160;mi) by road. Kata Tjuta and Uluru are the two major ' +
                    'features of the Uluru - Kata Tjuta National Park. Uluru is ';
                infowindow[i] = new google.maps.InfoWindow({
                    content: contentString[i]
                });

                //marker[i].addListener('click', function() {
                //    infowindow[i].open(map, marker[i]);
                //});
            }
        })

    }
</script>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyD9HfqjqR0VDGD5N1sCd_nU8qC7J5SXATM&callback=initMap"
        async defer></script>
</body>
</html>

And here is my Model:

namespace ProiectColectiv.Models
{
    public class Parking
    {
        public int Id { get; set; }

        public string Name { get; set; }

        public double Longitudine { get; set; }

        public double Latitudine { get; set; }
        public int NrFastChargingSpots { get; set; }

        public int NrNormalChargingSpots { get; set; }

        public List<Station> Stations { get; set; }
    }
}

Any idea why the data is not passed to javascript? Any help will greatly appreciated.

我认为您需要在Json()方法中添加JsonRequestBehavior.AllowGet作为第二个参数。

return Json(data, JsonRequestBehavior.AllowGet)

Resolved. The problem was that return Json(data) was returning a string, something like {name: "x"} and i was trying to take it as data.Name and i should have done it like data.name , as it comes from json.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM