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.