如何创建使用asp:ListItem列表作为子控件的ASP.NET用户/服务器控件?
发布时间:2020-05-29 23:41:42 所属栏目:asp.Net 来源:互联网
导读:我希望创建一个用以下内容创建的用户/服务器控件: my:MyListControl runat=server asp:ListItem Text=Test1 Value=Test1 / asp:ListItem Text=Test2 Value=Test2 //my:MyListControl 我只想在这里寻找一个开始: 文章或代码示例. 我应该从
|
我希望创建一个用以下内容创建的用户/服务器控件: <my:MyListControl runat="server"> <asp:ListItem Text="Test1" Value="Test1" /> <asp:ListItem Text="Test2" Value="Test2" /> </my:MyListControl> 我只想在这里寻找一个开始: 我应该从哪个基类继承?要覆盖什么? 可能如何自定义我的控件接受的子项(my:ListItem而不是asp:ListItem). 我想要做的是为我网站的一小部分创建一个非常简单的面包屑控制.我使用库存ASP.NET控件,但这些项目都添加在代码中,这意味着修复拼写错误或格式化错误涉及重新编译,这是不理想的. 编辑: 这是我的代码,下面添加了Josh的建议: 命名空间MySite.Controls 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> (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 强大类型的ASP.NET MVC与ADO.NET实体框架
- asp.net-mvc – ASP.NET MVC中的Windows Live ID
- 如何从asp.net中的客户端网络摄像头捕获图像
- mime-types – 在ASP.NET 5中使用MimeMapping(vNext)
- asp.net核心身份提取并保存外部登录令牌并添加对本地身份的
- asp.net-mvc-3 – 如何防止ASP.NET MVC应用程序中的DoS攻击
- 如何防止密码和其他敏感信息出现在ASP.NET转储中?
- asp.net-mvc – ASP.NET MVC做浏览器刷新让TempData无用吗?
- Asp.net MVC实现生成Excel并下载功能
- asp.net-mvc – 是否可以在MVC控制器中的一个操作上禁用授权
推荐文章
站长推荐
- asp.net – 从div标签中引发回发事件
- 如何在ASP.net中获取页面中的主页?
- asp.net – sitecore模板标准值布局不更新所有项
- asp.net-mvc – 如何在ASP.NET MVC中执行辅助操作
- 如何在ASP.Net WebControl的“Content”内部属性
- asp.net-mvc – Automapper映射到嵌套类
- 为熟悉ASP.NET Web表单开发的人建议MVC3的周末学
- asp.net-mvc – 将asp.net mvc beta部署到iis 6,
- asp.net – 总是显示FooterTemplate,甚至没有数据
- 白屏问题,如果用户在asp.net页面中保持空闲状态
热点阅读
