我尝试通过XElement绑定我的转发器。
在cs文件中
public void BindList()
{
XElement element = LoadXMLElement(GetList()); //Get List is another process its not a problem I got a list.
rptrList.DataSource = from x in element.Descendants("List")
select new { Value1 = x.Element("FileName"), Value2 = x.Element("URL"), Value3 = x.Element("Thumb") };
rptrList.DataBind();
}
public XElement LoadXMLElement(string xmlString)
{
XElement element = null;
try
{
element = XElement.Parse(xmlString);
}
catch (Exception ex)
{
throw new Exception("Unable to parse string to xmlformat");
}
return element;
}
在ascx中:
<asp:Repeater ID="rptrList" runat="server"
onitemdatabound="rptrTemplateList_ItemDataBound">
<ItemTemplate>
<li>
<p>
<asp:Label ID="lblTemplateName" runat="server" Text='<%#Eval("FileName") %>' />
</p>
<asp:Image ID="imgThubNail" runat="server" ImageUrl='<%#Eval("Thumb") %>' />
<br />
</li>
</ItemTemplate>
<FooterTemplate>
<asp:Label ID="lblEmptyData" Text="No item To Display" runat="server" Visible="false">
</asp:Label>
</FooterTemplate>
</asp:Repeater>
但是在ascx中Eval
不起作用。我尝试XPath
但没有运气。我尝试搜索但没有找到哪些帮助我。通过{{1}绑定转发器的正确方法是什么}。
答案 0 :(得分:1)
Eval()
次调用正在寻找FileName
和Thumb
,但Linq to XML查询返回的对象包含Value1
,Value2
和{{} 1}}。尝试更改查询...
Value3
答案 1 :(得分:0)
最好让查询返回XElements列表,而不是创建对象。
rptrList.DataSource = element.Descendants("List").Elements;
rptrList.DataBind();
将XElements发送到转发器后,您的ItemTemplate
可能如下所示:
<%#CType(Container.DataItem, System.Xml.Linq.XElement).Attribute("FileName").Value%>