ListView中的ListView,不能跟踪c#中嵌套lv的ID

本文关键字:ListView 嵌套 lv ID 中的 不能 跟踪 | 更新日期: 2023-09-27 18:05:49

这可能看起来很奇怪,或者我可能没有注意到我的错误,但是在后面编写代码时,我无法看到第二个ListView的ID。

使用ASP。. NET WebForms网站

这是我的。aspx代码

            <div class="slideshow">
                <asp:ListView runat="server" ID="lvCarousel" OnItemDataBound="lvCarousel_ItemDataBound" DataKeyNames="brand_id">
                    <LayoutTemplate>
                        <ul class="popup-slide">
                            <li runat="server" id="itemPlaceholder"></li>
                        </ul>
                    </LayoutTemplate>
                    <ItemTemplate>
                        <li class="popup-slideshow content-scroll ">
                            <figure class="ipad-scroll">
                                <figcaption>
                                    <div class="popup-slider">
                                        <div id="carousel1" class="carousel slide" data-ride="carousel">
                                           <ol class="carousel-indicators">
                                        <li data-target="#carousel2" data-slide-to="0" class="active"></li>
                                        <li data-target="#carousel2" data-slide-to="1"></li>
                                        <li data-target="#carousel2" data-slide-to="2"></li>
                                            <asp:ListView runat="server" ID="lvCarouselPic" OnItemDataBound="lvCarouselPic_ItemDataBound" DataKeyNames="brand_id">
                                                <LayoutTemplate>
                                            <div class="carousel-inner">
                                                <div class="item active">
                                                    <li runat="server" id="itemPlaceholder"></li>
                                                </div>
                                            </div>
                                                    </LayoutTemplate>
                                                <ItemTemplate>
                                                    <asp:Image runat="server" ID="imgSlideShow" ImageUrl="#" />
                                                </ItemTemplate>
                                                </asp:ListView>
                                                </ol>
                                        </div>
                                    </div>
                                </figcaption>
                            </figure>
                        </li>
                    </ItemTemplate>
                </asp:ListView>
                <nav class="popup-navigation"><span class="icon nav-prev"></span><span class="icon nav-next"></span><span class="icon nav-close"></span></nav>
            </div>
这是我的c#代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class index : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            DisplayCarousel();
        }
    }
    protected void DisplayCarousel()
    {
        using (Entities db = new Entities())
        {
            List<Brand> brand = db.Brands.ToList();
            lvCarousel.DataSource = brand.OrderByDescending(b => b.date_created);
            lvCarousel.DataBind();
        }
    }
}

每次我尝试在c#中输入lvCarouselPic时,它都没有出现。我的问题是一个品牌可以有很多图片,在这个幻灯片里,我想用carousel-indicators显示每个品牌对应的所有图片。如果你曾经做过这样的事情,可以帮助它将非常感激!由于

ListView中的ListView,不能跟踪c#中嵌套lv的ID

您需要在其绑定后循环遍历每个项目,并执行FindControl("id")并强制转换为ListView对象。然后可以绑定数据源。

下面是一些示例代码:
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        DisplayCarousel();
    }
}
protected void DisplayCarousel()
{
    using (Entities db = new Entities())
    {
        // get all your data first
        var DataList = db.Brands
            .Select(a => new
            {
                objBrand = a,
                PicList = a.Pics.ToList()
            })
            .OrderByDescending(a => a.objBrand.date_created)
            .ToList();

        // now bind the main listview to the Brand objects in the DataList
        lvCarousel.DataSource = Brands.Select(a => a.objBrand);
        lvCarousel.DataBind();
        foreach (ListViewItem objItem in lvCarousel.Items)
        {
            // get the data object
            var objData = DataList[objItem.DataItemIndex];
            // find the nested list view
            ListView lvCarouselPic = (ListView)objItem.FindControl("lvCarouselPic");
            // bind the data pics data source
            lvCarouselPic.DataSource = objData.PicList;
            lvCarouselPic.DataBind();
            // loop each pic item
            foreach (ListViewItem objNestedItem in lvCarouselPic.Items)
            {
                // get the pic object
                var objBrandPic = objData.PicList[objNestedItem.DataItemIndex];
                // do whatever you need with the pic data, find controls in the nested listview, etc.
            }
        }
    }
}

现在有一些关于这段代码的事情。首先,我将使AnonymousType (var)成为自定义对象。然后我将我的数据库调用移动到一个外部类,并调用该类并返回数据。

我相信你可以在OnItemCreated中做嵌套数据绑定,但是我从来没有这样做过。

还可以在前端html中绑定对象的数据(我在示例代码中没有看到任何数据)。例如:

<asp:Image runat="server" ID="imgSlideShow" ImageUrl='<%# Eval("FieldFromDatabase") %>' />

希望这能让你走对方向。