Невозможно увидеть только часть моего контроля, когда программно добавляю в 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);