2017-06-03 73 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

哇......好像我被所有那些不好的「代碼示例」誤導了。感謝您指出。它現在起作用,挽救了我的生命。 –

相關問題