Некоторые элементы управления ASP.NET разрешают только элементы определенных типов, например:
<uc:MyControl runat="server"....>
<MyTableTemplate>
<MyTableRow .... />
<MyTableRow .... />
<MyTableRow .... />
</MyTableTemplate>
</uc:MyControl>
Я пытаюсь воссоздать это в своем собственном пользовательском элементе управления, так что вы можете помещать объекты MyTableRow только вШаблон и Visual Studio будут препятствовать тому, чтобы дизайнер вставлял что-либо еще.
Я смотрел на класс ControlBuilder , но я не совсем уверен, что он делает то, что я хочу.Кроме того, в примерах не упоминается вложенность, которую я имел выше, где массив MyTableRow находится в другом поле шаблона.
Кто-нибудь знает, как этого добиться?
Редактировать: Кажется, что UpdatePanel работаеттаким образом: если вы объявите UpdatePanel следующим образом:
<asp:UpdatePanel>
<Triggers>
</Triggers>
</asp:UpdatePanel>
Вы не можете поместить в раздел «Триггеры» ничего, кроме двух конкретных элементов управления, перечисленных в intellisense, и при попытке получить ошибку времени разработки.Это именно то поведение, которое я хочу имитировать.
====
Я попытался реализовать предложение Алекса, вот мой код:
public partial class MyControl : System.Web.UI.UserControl
{
[PersistenceMode(PersistenceMode.InnerProperty)]
public ActionButtonCollection ActionButtons
{
get;
set;
}
}
public class ActionButtonCollection : Collection<ActionButton>
{
}
public abstract class ActionButtonBase
{
public string Test { get; set; }
}
public class ActionButton : ActionButtonBase
{
}
Однако с этимкод, внутри которого нет смысла
<uc:MyCustomControl runat="server">
<ActionButtons>
</ActionButtons>
</uc:MyCustomControl >