数据绑定:'系统Char'不包含名为'xxxxx'

DataBinding: 'System.Char' does not contain a property with the name 'xxxxx'

本文关键字:包含名 xxxxx 系统 数据绑定 Char      更新时间:2023-09-26

DataBinding:'系统。Char'不包含名为"City"的属性。我从xml文件中检索数据,我想用JavaScript将这些字段放在中继器中,以便Google映射数据绑定时发生的情况。

<body>
    <form id="form1" runat="server">
    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?      sensor=false"></script>
    <script type="text/javascript">
        var markers = [
        <asp:Repeater ID="rptMarkers" runat="server">
        <ItemTemplate>
                 {
                "title": '<%# Eval("City") %>',
                 "lat": '<%# Eval("Latitude") %>',
                 "lng": '<%# Eval("Longitude") %>',
             }
    </ItemTemplate>
    <SeparatorTemplate>
        ,
    </SeparatorTemplate>
    </asp:Repeater>
    ];
    </script>
    <script type="text/javascript">
        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.open(map, marker);
                    });
                })(marker, data);
            }
        }
    </script>
    <div id="dvMap" style="width: 500px; height: 500px">
    </div>
      </form>

这是后面的代码,`

string xx = string.Empty;
void GetData(string strRsult)
{
    XmlDataDocument xmlDataDoc = new XmlDataDocument();
    xmlDataDoc.LoadXml(strRsult);
    foreach (XmlNode n in xmlDataDoc.DocumentElement.GetElementsByTagName("Property"))
    {
        if (n.HasChildNodes)
        {
            foreach (XmlNode childNode in n)
            {
                switch (childNode.Name)
                {
                    case "GEOData":
                        {
                            xx = childNode.Attributes["City"].Value + ", " + childNode.Attributes["Longitude"].Value + ", " + childNode.Attributes["Latitude"].Value;
                            rptMarkers.DataSource = xx.ToCharArray();
                            rptMarkers.DataBind();
                            break;
                        }
                    default: break;
                }
            }
        }
    }
}`

当前您正在将数据源设置为一个字符数组,而Repeater正试图获取每个charCity属性,当然char没有City属性。要解决这个问题,首先需要创建一个包含您感兴趣的属性的类

public class Markers
{
    public string City {get; set;}
    public string Latitude {get; set;}
    public string Longitude {get; set;}
}

然后从xml创建一个Markers集合,并将数据源设置为该集合。

List<Markers> markers = new List<Markers>();
foreach (XmlNode n in xmlDataDoc.DocumentElement.GetElementsByTagName("Property"))
{
    foreach (XmlNode childNode in n)
    {
        if(childNode.Name == "GEOData")
        {
            markers.Add(new Markers
                {
                    City = childNode.Attributes["City"].Value,
                    Longitude= childNode.Attributes["Longitude"].Value,
                    Latitude= childNode.Attributes["Latitude"].Value
                });
        }
    }
}
rptMarkers.DataSource = markers;
rptMarkers.DataBind();