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;
}
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)