net ejemplo dinamicamente crear controles asp .net asp.net user-controls servercontrols

dinamicamente - checkboxlist asp.net ejemplo



¿Cómo crear el control de usuario/servidor ASP.NET que usa una lista de asp: ListItem como controles secundarios? (2)

Puede agregar una propiedad en el código de control de un usuario como:

[PersistenceMode(PersistenceMode.InnerProperty)] public List<ListItem> Items { get; set; }

Su marcado sería entonces:

<my:MyListControl runat="server"> <Items> <asp:ListItem/> </Items> </my:myListControl>

Para que sea así, ListItem puede ser tu propio elemento de la lista (que recomiendo hacer en lugar de usar asp.net). Querrás crear tu propia clase.

Aquí hay un ejemplo de un Control de servidor que uso (eliminé mucho ruido, por lo que esto es solo un esqueleto):

[ToolboxData("<{0}:Menubar runat=server></{0}:Menubar>")] [System.ComponentModel.DesignTimeVisible(false)] public class Menubar : WebControl, IPostBackEventHandler { private List<MenuItem> _menuItems = new List<MenuItem>(); [PersistenceMode(PersistenceMode.InnerProperty)] public List<MenuItem> MenuItems { get { return _menuItems; } } } [ToolboxItem(false)] [ParseChildren(true, "MenuItems")] public class MenuItem { private string _clientClick; private List<MenuItem> _menuItems = new List<MenuItem>(); [Localizable(true)] public string Title { get; set; } public string Href { get; set; } public string Id { get; set; } [PersistenceMode(PersistenceMode.InnerDefaultProperty)] public List<MenuItem> MenuItems { get { return _menuItems; } set { _menuItems = value; } } }

Ahora puedo usar esto como:

<my:Menubar runat="server" ID="menuBar"> <MenuItems> <my:MenuItem Title="Save" Href="javascript:saveItem(this);" /> <my:MenuItem Title="Print" Href="javascript:void(0);"> <MenuItems> <my:MenuItem Title="Preview" Href=""/> <my:MenuItem Title="To Pdf" Href="javascript:"/> </MenuItems> </my:MenuItem> </MenuItems> </my:Menubar>

Estoy buscando crear un control de usuario / servidor que se creará con algo como lo siguiente:

<my:MyListControl runat="server"> <asp:ListItem Text="Test1" Value="Test1" /> <asp:ListItem Text="Test2" Value="Test2" /> </my:MyListControl>

Solo estoy buscando un comienzo aquí: Artículos o muestras de código.

¿De qué clase base debería heredar? ¿Qué anular?

Posiblemente, cómo personalizar qué subelementos acepta mi control (mi: ListItem en lugar de asp: ListItem).

Lo que quiero hacer es crear un control de migas de pan muy simple para una pequeña sección de mi sitio. Lo tengo todo funcionando con controles stock ASP.NET, pero los elementos se agregan en código, lo que significa que corregir un error de ortografía o un error de formato implica una recompilación, lo que no es ideal.

EDITAR:

Aquí está mi código con la adición de la sugerencia de Josh a continuación:

Espacio de nombres MySite.Controles Parcial Class BreadCrumbs Hereda UserControl

Private m_BreadCrumbs As New List(Of BreadCrumbItem) <PersistenceMode(PersistenceMode.InnerProperty)> _ Public Property Items() As List(Of BreadCrumbItem) Get Return m_BreadCrumbs End Get Set(ByVal value As List(Of BreadCrumbItem)) m_BreadCrumbs = value End Set End Property Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load Bind() End Sub Private Sub Bind() lvCrumbs.DataSource = Items Me.DataBind() End Sub End Class Public Class BreadCrumbItem Private m_Text As String Public Property Text() As String Get Return m_Text End Get Set(ByVal value As String) m_Text = value End Set End Property Private m_Url As String Public Property Url() As String Get Return m_Url End Get Set(ByVal value As String) m_Url = value End Set End Property End Class

Espacio de nombres final

Entonces mi código de página se ve así:

<%@ Page Language="VB" AutoEventWireup="false" Inherits="MySite.MyPage" Title="My Page" Codebehind="MyPage.aspx.vb" %> <%@ Register TagPrefix="my" Namespace="MySite.Controls" Assembly="MySite" %> <my:BreadCrumbs ID="breadcrumbs" runat="server"> <Items> <my:BreadCrumbItem Text="Another page" Url="AnotherPage.aspx" /> </Items> </my:BreadCrumbs>


Use un asp: Repeater luego vincule a una lista de los objetos que desea en su ruta de navegación. Puede usar la plantilla para personalizar los elementos y los separadores.