使用嵌套中继器内的数据主题项目

问题描述:

我有一个博客的代码嵌套在数据列表中的中继器控制。使用嵌套中继器内的数据主题项目

我想分配转发器控制图像的alt标签作为通过datalist发布的帖子的标题,但是,它不会让我这样做,因为它具有不同的数据源。

有关我如何做到这一点的任何建议?

这里是我的代码:

<asp:DataList runat="server" ID="DataList1" ItemStyle-CssClass="row1BackgroundBlock" OnItemDataBound="DataList1_ItemDataBound" > 
    <ItemTemplate> 
<!-- <%#Eval("PostId")%> post --> 
<div class="dateBox"><asp:Label ID="Label1" runat="server" ForeColor="#ffffff" Font-Bold="False" Text='<%# Eval("PublicationDate","{0:dd/MM/yyyy}") %>' CssClass="postmetadata"></asp:Label></div> 
<div class="roundPanelStack"> 
<h2><asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Engine2010.Blog.BlogLinksManager.GetFullPostsLinks((int)Eval("PostId"), (object)Eval("FURL")) %>'><%# Eval("Title") %></asp:HyperLink></h2> 
<ul><li class="postBy">Posted in <a href="<%#CommonFunctions.GetTreeURL(146).ToString() + "?categoryid=" + Eval("CategoryID") %>"><%#Eval("CategoryName")%></a> by <%#Eval("Author")%></li><li class="last">{<%# Engine2010.Blog.PostComment.GetAllByPostId(int.Parse(Eval("PostId").ToString()), 766).Rows.Count.ToString()%> comments}</li></ul> 

<div class="thumbWindow"> 
<div style="border:7px solid #fff;display:block;height:95px;left:1px;position:absolute;top:1px;width:95px;z-index:5;"></div> 
     <asp:Repeater ID="repImgs" runat="server"> 
      <ItemTemplate> 
       <img class="thumb_view" src="/uploads/images/Blog/<%# Eval("Directory").ToString().Substring(Eval("Directory").ToString().LastIndexOf("\\")+1) %>/<%# Eval("Name") %>" alt="" border="0" width="143" height="143" /> 
      </ItemTemplate> 
     </asp:Repeater> 

     <asp:PlaceHolder ID="PlaceHolder1" runat="server" Visible="false"> 
     <img src="/includes/images/general/default.jpg" alt="Default" border="0" width="110" height="110" /> 
     </asp:PlaceHolder> 
</div> 

<p> 
<asp:Label ID="Label2" runat="server" Text='<%#CommonFunctions.Remove_HTML_Tags(Eval("Description").ToString()) %>' CssClass="entry"></asp:Label> 
</p> 

<div class="linksMore"> 
<asp:HyperLink ID="FullStoryLink" runat="server" NavigateUrl='<%# Engine2010.Blog.BlogLinksManager.GetFullPostsLinks((int)Eval("PostId"), (object)Eval("FURL")) %>' CssClass="fullstory">Read Full Post</asp:HyperLink><a class="spacer">&nbsp;//&nbsp;</a><asp:HyperLink ID="CommentsLink" runat="server" NavigateUrl='<%# Engine2010.Blog.BlogLinksManager.GetFullPostsLinks((int)Eval("PostId"), (object)Eval("FURL")) + "#comment" %>' CssClass="comments">Comment</asp:HyperLink> 

</div> 


</div> 
<!-- /first post --> 
    </ItemTemplate> 
</asp:DataList> 

后端:

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     Repeater repImages = (Repeater)e.Item.FindControl("repImgs");       // Child repeater with images for room 
     string amenText = ((DataRowView)e.Item.DataItem).Row.ItemArray[7].ToString(); 
      DirectoryInfo folderBr = new DirectoryInfo(Server.MapPath("~/uploads/images/Blog/") + amenText); 
     // List<Engine2010.ImageObj> imageObjs = folderBr.GetImagesInPath(); 

     if (folderBr.Exists) 
      { 
       repImages.DataSource = folderBr.GetFiles("thumb*.*");              // Bind room images to child repeater 
       repImages.DataBind(); 

       if (repImages.Items.Count == 0) 
       { 
        PlaceHolder placeholder1 = (PlaceHolder)e.Item.FindControl("PlaceHolder1"); 
        placeholder1.Visible = true; 
       } 
      } 
      else { 
       PlaceHolder placeholder1 = (PlaceHolder)e.Item.FindControl("PlaceHolder1"); 
       placeholder1.Visible = true; 
      } 
    } 
} 
+0

检查我的答案... – 2014-10-01 12:03:37

结合repImages repater控制后的ItemDataBound事件您DataList1,通过每个项目重复使用RepeaterItem,然后找到你img控制并在此类标签中分配标题 -

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
    { 
     Repeater repImages = (Repeater)e.Item.FindControl("repImgs"); 
     string amenText = ((DataRowView)e.Item.DataItem).Row.ItemArray[7].ToString(); 
     DirectoryInfo folderBr = new DirectoryInfo(Server.MapPath("~/uploads/images/Blog/") + amenText); 

     if (folderBr.Exists) 
     { 
      repImages.DataSource = folderBr.GetFiles("thumb*.*");  // Bind room images to child repeater 
      repImages.DataBind(); 

      if (repImages.Items.Count == 0) 
      { 
       PlaceHolder placeholder1 = (PlaceHolder)e.Item.FindControl("PlaceHolder1"); 
       placeholder1.Visible = true; 
      } 

      // Iterate thru each item of your child repeate control. 
      foreach (RepeaterItem repeaterItem in repImages.Items) 
      { 
       if (repeaterItem.ItemType == ListItemType.Item || 
        repeaterItem.ItemType == ListItemType.AlternatingItem) 
       { 
        ((HtmlImage)(repeaterItem.FindControl("imgId"))).Alt = amenText; // Assume amenText is the title of your post 
       } 

      } 
     } 
     else 
     { 
      PlaceHolder placeholder1 = (PlaceHolder)e.Item.FindControl("PlaceHolder1"); 
      placeholder1.Visible = true; 
     } 
    } 
} 

祝你好运...

+0

这个答案完美工作。非常感谢你 :) – 2014-10-01 15:07:56