Search code examples
javascriptasp.netarraysgoogle-mapsrepeater

Javascript Array generated by ASP Repeater not updated


I have a repeater to generate an array(for google map marker) in client side javascript. It works fine on first load but when I trigger a post back and bind the repeater with other data. The repeater will return the initial array value to my variable. Is there any way going wrong? please help

<script type="text/javascript">
  Var markers = [];
    function LoadMarker() {
    markers = [];
    var data =[
    <asp:Repeater ID="rptMarkers" runat="server">
    <ItemTemplate>
                {
                "title": '<%# Eval("DeviceName") %>',
                "lat": '<%# Eval("Latitude") %>',
                "lng": '<%# Eval("Longitude") %>',
                "Origlat": '<%# Eval("OrigLatitude") %>',
                "Origlng": '<%# Eval("OrigLongitude") %>',
                "description": '<%# Eval("Description") %>',
                "Status": '<%# Eval("Status") %>',
                "Active": '<%# Eval("Active") %>'
            }
    </ItemTemplate>
    <SeparatorTemplate>
        ,
    </SeparatorTemplate>
    </asp:Repeater>];
    markers = data;

    }


Solution

  • Repeater does not work for me but I found an alternative. From code behind serialize dataset with JavaScriptSerializer. Then parse it into a hiddenfield to be accessible by client side code.

    HTML

    <asp:HiddenField ID="hfSortOrder" runat="server" />
    

    JS

    var markers = [];
    markers = JSON.parse(document.get`enter code here`ElementById('<%= hfDummy.ClientID%>').value);
    for (i = 0; i < markers.length; i++) {
    var data = markers[i]
    //Do your stuff etc: var info = data.column1
    }
    

    VB.NET

        Dim dsdata As New DataSet
        Dim dt As New DataTable()
        Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer()
        Dim rows As New List(Of Dictionary(Of String, Object))()
        Dim row As Dictionary(Of String, Object)
    
    dsdata = ReadData()            
    
    For Each dr As DataRow In dt.Rows
    row = New Dictionary(Of String, Object)()
       For Each col As DataColumn In dt.Columns
          row.Add(col.ColumnName, dr(col))
       Next
    rows.Add(row)
    Next
    hfDummy.Value = serializer.Serialize(rows)