2014-05-01 42 views
1

我尝试通过XElement绑定我的中继器。通过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但没有luck.I尝试搜索,但没有找到它帮助我。什么是通过XElement绑定中继器的正确方法。

回答

1

的​​呼叫正在寻找FileNameThumb,但LINQ到XML查询与Value1Value2Value3返回对象。尝试更改查询...

rptrList.DataSource = from x in element.Descendants("List") 
         select new { 
          FileName = x.Element("FileName"), 
          URL = x.Element("URL"), 
          Thumb = x.Element("Thumb") 
         }; 
0

可能更希望让您的查询返回XElements列表,而不是创建对象。

rptrList.DataSource = element.Descendants("List").Elements; 
rptrList.DataBind(); 

一旦你发送XElements到Repeater,您可以ItemTemplate是这样的:

<%#CType(Container.DataItem, System.Xml.Linq.XElement).Attribute("FileName").Value%>