我这里主要有3 个用户控件(栏目列表,下面的版权等信息,用户登陆),这里都一一的说来。设计用户控件的时候,
注意:
不需要页指令。 文件扩展名必须是 .ascx。 必须包含 @ Register 指令。
详见: ms-help://MS.NETFrameworkSDKv1.1.CHS/mwsdk/html/mwconUserControls.htm
头栏目控件页
代码拷贝框
[Ctrl+A 全部选择 然后拷贝]
其中核心就是:
sub page_load() const sortcachestr_key as string = "sortcjjer" dl_catsort.datasource = CoutData.CoutSortData(sortcachestr_key) dl_catsort.databind() end sub <asp:repeater id="dl_catsort" runat="server" > <ItemTemplate><li><a href="<%# Container.dataitem("sort_url") %>"> <%# Container.dataitem("sort_name") %></a></li></ItemTemplate> </asp:repeater>
这个repeater控件的数据源来自缓存,一般的说了,栏目数据较少,但常用,适合放到缓存里面,我设计了CoutData.CoutSortData([par...]):
Shared Function CoutSortData ( optional cache_key as string = "catsort_cache_value" , optional tabref as string = "cjjer" ) as DataSet Dim cache as Cache = HttpContext.Current.Cache '引用当前页 dim objdataset as new dataset() if not isnothing( cache (cache_key) ) then objdataset = ctype( cache (cache_key),dataset) ' cache.remove(cache_key) else ' HttpContext.Current.Response.Write("重新加载数据") dim conn as new Conn() dim sqled as string sqled = " select * from [szd_sort] order by [sort_level]" objdataset =conn.GetDataSet(sqled,tabref) cache.insert(cache_key,objdataset,Nothing,DateTime.Now.AddMinutes(15) , cache.NoSlidingExpiration) '这种方法是创建相对过期的cache,就是不在此页面活动 5 分钟就重建,和session的策略类似 ' cache.insert(cache_key,objdataset,Nothing,Cache.NoAbsoluteExpiration,TimeSpan. FromMinutes(5)) End if return objdataset End Function
底部版权控件页
ascx/copyright.ascx
代码拷贝框
[Ctrl+A 全部选择 然后拷贝]
没啥说的。
上面的控件使用的时候:
<%@ Register tagprefix ="CJJERGUESTBOOK" tagname="copyright" src="ascx/copyright.ascx" %> <%@ Register tagprefix ="CJJERGUESTBOOK" tagname="catsort" src="ascx/catsort.ascx" %>
<CJJERGUESTBOOK:catsort id ="ccatsort1" runat ="server" />
<CJJERGUESTBOOK:copyright id="ccopyright1" runat="server"/>
用户登陆控件
我这个是稍微花了点时间搞的,这个控件把验证用户数据全部集成到控件本身,专门写了一个类: BookAdminSpace: AdminUserLogin
代码拷贝框
[Ctrl+A 全部选择 然后拷贝]
继承Control基类,使用接口INamingContainer,主要是获得用户提交的信息。
创建控件的时候;Protected Overrides Sub CreateChildControls() 'Protected
这是必须的。
验证的时候:
strUsername = CTYPE( Controls( 1 ), TextBox ).Text [code]
这适合单页面的检测,如果用户控件多的话,这种编号的方式可能出错(超出本教程,以后谈)。
使用的时候:
[code] <%@ Register TagPrefix="BookAdmin" Namespace="BookAdminSpace" Assembly="AdminUserLogin"%> <form runat="server"><BookAdmin:AdminUserLogin runat="server" /></form>
form是必须的。
出处:蓝色理想
责任编辑:moby
上一页 基类设计 下一页 显示留言,分页
◎进入论坛网络编程版块参加讨论
|