以编程方式添加到 div 时,无法仅看到我的部分控件

Unable to see only some of my control when programmatically add to a div

所以我有点坚持尝试根据数据库数据将我自己的用户控件的多个副本添加到页面。

如果我将它直接添加到 aspx 文件中,我的用户控件可以显示,但当我尝试以编程方式在页面加载循环中添加它时不会显示。 我还尝试在循环中添加其他简单的控件,例如 LiteralControl,它们可以毫无问题地显示在页面上。

我也尝试将 width/height 添加到 div,将 div 更改为 asp:Panel 和 asp:PlaceHolder 但 none这行得通。我还在循环期间仔细检查了控件的创建和添加是否可见 = true。有人发现新手的错误吗?

我的非常简单的用户控件:

public partial class VenueItemControl : System.Web.UI.UserControl
{
    public string Name;
    public string Desc;
    public string Address;
    public string Price;

    /// <summary>
    /// 
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="VenueItemControl.ascx.cs" Inherits="WatchBar.Controls.VenueItemControl" %>
<div class="card">
    <div class="card-block">
        <div class="thumbmails">
            <div class="current-img">

            </div>
            <div class="thumbnail-list">

            </div>
        </div>
        <div class="">
            <label class="row" style="font-size:20pt"><%=Name%></label><br />
            <label class="row" style="font-size:12pt"><%=Address%></label>
            <div class="row">
                <textarea class="col-md-3" rows="5" cols="50" style="vertical-align: top;"><%=Desc%></textarea>
                <div class="col-md-1" style="display: inline-block;">
                    <label>Mimimum charge: <%=Price%></label><br />
                    <button class="btn btn-sm btn-seconday"><i class="fa fa-plus"></i>Share</button>
                </div>
            </div> 
        </div>
    </div>
</div>

我的主页:

    protected void Page_Load(object sender, EventArgs e)
    {
        List<venue> venues = xxxxx;

            foreach (var v in venues)
            {
                VenueItemControl item = new VenueItemControl()
                {
                    Name = v.name,
                    Desc = v.desc,
                    Address = v.address,
                    Price = "999"
                };

                itemHolder.Controls.Add(item);
                itemHolder.Controls.Add(new System.Web.UI.LiteralControl("<b>test</b><br/>"));
            }
    }


<%@ Page Title="" Language="C#" MasterPageFile="~/MainSite.Master" AutoEventWireup="true" CodeBehind="Search.aspx.cs" Inherits="xxx.Search" %>
<%@ Register TagPrefix="uc" TagName="VenueItem" Src="Controls\VenueItemControl.ascx" %>
<%@ Reference Control="Controls/VenueItemControl.ascx"%>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <div ID="itemHolder" runat="server" style="width:500px; height:800px"> 

    </div>
    <asp:Panel id="itemHolder2" runat="server">
        <uc:VenueItem Name="1" Desc="2" Address="sd" Price="2" runat="server"/>
    </asp:Panel>
</asp:Content>

我不知道你是从哪里学会这样添加用户控件的。但这不是你添加它们的方式。您还需要使用 LoadControl 指定路径。

var venueItemControl = (VenueItemControl)LoadControl("~/VenueItemControl.ascx");
venueItemControl.Name = "Name";
venueItemControl.Desc = "Description";
itemHolder.Controls.Add(venueItemControl);