2016-11-06 60 views
0

我试图使用数据我从剃刀视图中的模型中获取到js中的数组以便在Google地图上显示多个标记。我迄今为止传递的数据为innerHtml,而地图我无法显示任何标记。 enter image description here从剃刀视图中的foreach循环获取项目值到js数组

@foreach (var item in Model.UpcomingLectureGigs) 
{ 
    <div class="well"> 
     <h1>blabla</h1> 
     @*Parm*@ 
     <span class="js-latmaps">@item.Latitude </span>@*DataOk*@ 
     <span class="js-lngmaps">@item.Longitude </span>@*DataOk*@ 
     <span class="js-name">@item.Venue</span>@*DataOk*@ 

    </div> 
} 

<hr /> 

<div class="well"> 
    <div id="dvMap" style="width: 500px; height: 500px"> 
    </div> 
</div> 
@section scripts { 

    <script type="text/javascript"> 
     var markers = [ 
        { 
         "lat": $(".js-latmaps"), 
         "lng": $('.js-lngmaps'), 
         "description": $('.js-name') 
         //"lat":37.777698,// Ok 
         // "lng":-100.0227294,//Ok 
         //"description":"myShop"//Ok 
        } 
     ]; 
     console.log(markers); 
     window.onload = function() { 
      var mapOptions = { 
       center: new window.google.maps.LatLng(markers[0].lat, markers[0].lng), 
       zoom: 10, 
       mapTypeId: window.google.maps.MapTypeId.ROADMAP 
      }; 
      var infoWindow = new window.google.maps.InfoWindow(); 
      var map = new window.google.maps.Map(document.getElementById("dvMap"), mapOptions); 
      for (var i = 0; i < markers.length; i++) { 
       var data = markers[i]; 
       var myLatlng = new window.google.maps.LatLng(data.lat, data.lng); 
       var marker = new window.google.maps.Marker({ 
        position: myLatlng, 
        get map() { return map; } 
       }); 
       (function (marker, data) { 
        window.google.maps.event.addListener(marker, "click", function (e) { 
         infoWindow.setContent(data.description); 
         infoWindow.open(map, marker); 
        }); 
       })(marker, data); 
      } 
     }; 
    </script> 

cotroller

public ActionResult Index(string query = null) 
    { 
     //ToDo refactor 
     int myDayOfWeek = 0; 
     DateTime dt = DateTime.Today; 
     myDayOfWeek = (int) dt.DayOfWeek; 


     var upCommingLecture = _context.LectureGigs 
      .Include(g => g.Artist).Include(g => g.Genre) 
      .Where(g => (g.DateTime < DateTime.Now && !g.IsCanceled 
         || (g.IsWeekLy == true 
          && (int) g.Days == (myDayOfWeek)))); 

     if (!string.IsNullOrWhiteSpace(query)) 
     { 
      upCommingLecture = upCommingLecture 
       .Where(g => 
        g.Artist.Name.Contains(query) || 
        g.Genre.Name.Contains(query) || 
        g.Venue.Contains(query) || 
        g.NewRabiName.Contains(query)); 
     } 
     var viewModel = new GigsViewModel 
     { 
      UpcomingLectureGigs = upCommingLecture, 
      //parm 
      SearchTerm = query, 
     }; 

     return View("index", viewModel); 
    } 
+2

使用'VAR标记= @ Html.Raw(Json.Encode(Model.UpcomingLectureGigs))'(注意你的模特属性需要命名为您'UpcomingLectureGigs'财产转换为JavaScript数组''lat','lng'和'description',如果你想以'var markers = ...'显示的相同格式) –

+0

@StephenMuecke原谅我的无知,但是我怎么能在假设之后从var数据中提取属性你的意思是在剃刀上这么做? –

+0

与您现在所做的一样 - 只是遍历数组并访问数组中每个对象的属性 –

回答

0

您的代码拉纬度和经度正在推动jQuery对象,而不是我想你得可能做一些格式。

var arrLat = []; 

$(".j-latmaps").each(function() { 
    var lat = $(this).html(); 
    arrLat.push(lat); 
}); 

并对经度做同样的处理,然后传递数组。该中心将是:

center: new window.google.maps.LatLng(arrLat[0], arrLng[0]), 
+0

使用此2在标记>处获得错误:for(var i = 0; i

相关问题