我从服务中获取了一些Xml。我希望它是我的aspx页面上的网格视图的数据源。这是一个Xml的样本
<?xml version="1.0" encoding="utf-16" ?>
<ArrayOfTripTollCompleteDC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<TripTollCompleteDC>
<TripTollId>5</TripTollId>
<DMSLaneModeID xsi:nil="true" />
<HOVOnly>false</HOVOnly>
<CreateDateTime>2010-06-07T15:54:01.023</CreateDateTime>
<ConfigVTMSDelaySeconds>5</ConfigVTMSDelaySeconds>
</TripTollCompleteDC>
这是我的代码解析xml并尝试绑定网格。我在这里缺少什么?
var retVal = service.GetTripDetailsByTripID(tripId);
var xmlTrips = XDocument.Parse(retVal);
var tripTolls =
from t in xmlTrips.Elements("TripTollCompleteDC")
select new {
TripTollId = (int)t.Element("TripTollId")
, DMSLaneModeID = (int?)t.Element("DMSLaneModeID")
, HOVOnly = (bool)t.Element("HOVOnly")
, CreateDateTime = (DateTime)t.Element("CreateDateTime")
, ConfigVTMSDelaySeconds = (int)t.Element("ConfigVTMSDelaySeconds")
};
grdTripDetails.DataSource = tripTolls;
grdTripDetails.DataBind();
我意识到这些是匿名类型。那是问题吗?我已经验证了服务正在返回如上所述的Xml。任何人都可以指出我正确的方向吗?非常感谢任何提示。
为了完整起见,这里是网格标记
<asp:GridView runat="server" ID="grdTripDetails" />
干杯,
〜在圣地亚哥
答案 0 :(得分:1)
试试这个:
from t in xmlTrips.Root.Elements("TripTollCompleteDC")
注意在那里添加了Root
。只有一个顶级元素,它不是TripTollCompleteDC。
您还需要自动生成列 - 我不知道网格视图。这提出了一个关于调试这种事情的有用的观点。这里有两个潜在的问题:
您可以通过记录测试第一个点 - 以您通常记录的任何方式记录转换后的值。哎呀,你甚至可以使用一个单独的控制台应用程序进行测试。 (这就是我刚才所做的。)
您可以通过对某些数据进行硬编码并重新加载页面来测试第二点 - 它是否会显示您的预期结果?如果没有,请调整代码,直到它完成您想要的操作。
将这两个问题分开使得 更容易解决问题。