gpt4 book ai didi

.net - 如何创建使用asp :ListItem as child controls?列表的ASP.NET用户/服务器控件

转载 作者:行者123 更新时间:2023-12-04 03:47:25 25 4
gpt4 key购买 nike

我正在寻找一个将使用以下内容创建的用户/服务器控件:

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

我只是在这里寻找一个起点:
文章或代码示例。

我应该继承什么基类?要覆盖什么?

可能如何自定义控件接受的子项(my:ListItem而不是asp:ListItem)。

我想要做的是为我的网站的一小部分创建一个非常简单的面包屑控件。我已经使用ASP.NET控件进行了所有工作,但是这些项目是在代码中添加的,这意味着修复拼写错误或格式错误会导致重新编译,这并不理想。

编辑:

这是我的代码,加上下面乔什的建议:

命名空间MySite.Controls
部分类面包屑
继承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

结束命名空间

然后我的页面代码如下所示:
<%@ 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>

最佳答案

您可以在用户控件的代码后面添加属性,例如:

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

您的标记将是:
<my:MyListControl runat="server">
<Items>
<asp:ListItem/>
</Items>
</my:myListControl>

为了使ListItem成为您自己的列表项(我建议这样做,而不是使用asp.net。),您需要创建自己的类。

这是我使用的服务器控件的一个示例(我消除了很多杂音,因为这仅仅是一个骨架):
   [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; }
}
}

现在我可以这样使用:
<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>

关于.net - 如何创建使用asp :ListItem as child controls?列表的ASP.NET用户/服务器控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/794500/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com