Я пытаюсь создать пользовательский элемент управления, который дополняет элементы управления, предоставляемые страницей ASPX хостинга, дополнительным html.
До сих пор я работал с тем, что у меня есть пользовательский элемент управления, где могут быть дочерние элементы управления.добавлено в родительском.Я также могу отобразить все элементы управления, например, внутри div, но не могу добавить div для каждого дочернего элемента отдельно.
На родительской странице aspx определены следующие элементы:
<uc:MyUserControl runat="server">
<Items>
<asp:Button runat="server" />
<asp:Button runat="server" />
</Items>
</uc:MyUserControl>
MyNamingContainer.ascx.cs:
public class MyNamingContainer : Control, INamingContainer {}
[ParseChildren(true)]
public partial class MyUserControl : UserControl
{
[TemplateContainer(typeof(MyNamingContainer))]
[TemplateInstance(TemplateInstance.Single)]
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate Items { get; set; }
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
var container = new MyNamingContainer();
Items.InstantiateIn(container);
_placeHolder.Controls.Add(container);
}
}
MyNamingContainer.ascx:
<div>
<asp:PlaceHolder runat="server" ID="_placeHolder"></asp:PlaceHolder>
</div>
Результат html:
<div>
<input ... />
<input ... />
</div>
То, чего я хотел бы достичь, - это иметь что-тонапример:
<div>
<div class="someClass">
<input ... />
</div>
<div class="someClass">
<input ... />
</div>
<div>
Есть ли способ добавить эти дополнительные элементы, используя подход с ITemplate, или есть другой способ решения этой проблемы?
Я также пытался добавить элементы управления без ITemplate.:
[PersistenceMode(PersistenceMode.InnerProperty)]
public List<Control> Items { get; set; }
Затем элементы были связаны с ретранслятором с заполнителем в шаблоне ItemTemplate.
<asp:Repeater runat="server" OnItemDataBound="OnRepeaterItemDataBound">
<ItemTemplate>
<div class="someClass">
<asp:PlaceHolder runat="server" ID="_itemPlaceholder">
</asp:PlaceHolder>
</div>
</ItemTemplate>
</asp:Repeater>
В «OnItemDataBound» был обнаружен заполнитель текущих элементов и заполнен DataItem.Но это приводит к проблемам, потому что элементы управления в плацдарме теряются после обратной передачи и должны быть повторно добавлены в OnInit.Это также работает, только если видимость элементов управления в «Элементах» не изменяется динамически.
Может ли кто-нибудь помочь мне с этой проблемой или предложить другой подход?