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

推荐订阅源

The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
LangChain Blog
WordPress大学
WordPress大学
H
Help Net Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Y
Y Combinator Blog
Blog — PlanetScale
Blog — PlanetScale
MyScale Blog
MyScale Blog
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
P
Proofpoint News Feed
D
DataBreaches.Net

博客园 - 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来提供的。