惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Hugging Face - Blog
Hugging Face - Blog
云风的 BLOG
云风的 BLOG
大猫的无限游戏
大猫的无限游戏
M
MIT News - Artificial intelligence
L
LangChain Blog
阮一峰的网络日志
阮一峰的网络日志
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Announcements
Recent Announcements
IT之家
IT之家
Google DeepMind News
Google DeepMind News
罗磊的独立博客
爱范儿
爱范儿
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
U
Unit 42
MongoDB | Blog
MongoDB | Blog
S
SegmentFault 最新的问题
B
Blog
博客园 - 叶小钗
月光博客
月光博客
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
C
Check Point Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知

博客园 - Loviy.Net

从今天开始博客重新开张啦 [cnforums1.2代码学习]4、关于论坛配置的序列化和反序列化做法 [cnforums1.2代码学习]3、论坛的数据库操作流程 - Loviy.Net - 博客园 [cnforums1.2代码学习]1、论坛的整体结构 XSL的运算符 XSL学习四 - xsl:choose 学习XSL - xsl:if 学习XSL二 - 学习XSL一 学习委托 客户短保存信息(cookie) SQL常用命令使用方法 Sql Server基本函数 常用SQL语句 WebLogic表格对象 Jsp通过JDBC连接SQL数据库 经典的鱼和水的对白 用样式定义打印1px表格 女孩子的心思真的难以琢磨
[cnforums1.2代码学习]2、关于论坛的页面结构 - Loviy.Net - ...
Loviy.Net · 2005-06-29 · via 博客园 - Loviy.Net

在aspx文件中显示的如下:

<Forums:Default runat="server"/>
从这个可以看出是一个自定义用户控件

然后我们在看Forums标签的定义
<%@ Register TagPrefix="Forums" Namespace="AspNetForums.Controls" Assembly="AspNetForums.Controls" %>
可以看的出,这个自定控件的代码是AspNetForums.Controls.Default类来实现的。

如下是类AspNetForums.Controls.Default的定义

public class Default : SkinnedForumWebControl
{
 ForumContext forumContext = ForumContext.Current;
 protected string skinFilename = "Skin-Default.ascx";

 public Default() : base()
 {

  // Assign a default template name
  if (SkinFilename == null)
   SkinFilename = skinFilename;
 }

 protected override void InitializeSkin(Control skin)
 {

 }

}

他继承了SkinnedForumWebControl这个类,这个类是处理皮肤控件的基类,这个类定义了怎么通过一个用户控件名称来生成控件
protected string skinFilename = "Skin-Default.ascx";
说明这个控件是由Skin-Default.ascx来生成页面控件的

这样就可以直接通过定义一个界面的ascx文件来生成我所需要的界面,这样起到代码和界面的完全分离,
但是我又怎么取用户控件中的代码呢?以及控件的事件呢?
让我们看看login.cs这个登陆控件的代码

//初始化控件
override protected void InitializeSkin(Control skin)
{

    // Find the username control
    username = (TextBox) skin.FindControl("username");

    // Find the password control
    password = (TextBox) skin.FindControl("password");

    // Find the login button
    loginButton = (Button) skin.FindControl("loginButton");
    loginButton.Click += new System.EventHandler(LoginButton_Click);
    loginButton.Text = ResourceManager.GetString("LoginSmall_Button");

    // Find the autologin checkbox
    autoLogin = (CheckBox) skin.FindControl("autoLogin");
    autoLogin.Text = ResourceManager.GetString("LoginSmall_AutoLogin");

}

看其中采用了skin.FindControl的方式来找到我所需要的控件,名称是我在ascx定义好的。
事件和方法等等都是通过这种方式。

所以这里边和普通的usercontrol是不同的,其实这里面用到的确切一点说应该是复合控件,
只不过他的复合控件中的控件是通过usercontrol来提供的。