2017-06-03 43 views
0

因此,我试图根据DB数据将多个自己的usercontrol副本添加到页面。以编程方式添加到div时,无法看到我的部分控件

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

我也尝试添加宽度/高度的div,更改div为asp:Panel和asp:PlaceHolder,但它们都不起作用。我也在循环中检查了控件是否被创建并添加了visible = 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> 

回答

1

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

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

哇......好像我被所有那些不好的“代码示例”误导了。感谢您指出。它现在起作用,挽救了我的生命。 –

相关问题