在aspx文件中显示的如下:
<Forums:Default runat="server"/>
从这个可以看出是一个自定义用户控件
从这个可以看出是一个自定义用户控件
然后我们在看Forums标签的定义
<%@ Register TagPrefix="Forums" Namespace="AspNetForums.Controls" Assembly="AspNetForums.Controls" %>
可以看的出,这个自定控件的代码是AspNetForums.Controls.Default类来实现的。
<%@ 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";
{
ForumContext forumContext = ForumContext.Current;
protected string skinFilename = "Skin-Default.ascx";
public Default() : base()
{
{
// Assign a default template name
if (SkinFilename == null)
SkinFilename = skinFilename;
}
if (SkinFilename == null)
SkinFilename = skinFilename;
}
protected override void InitializeSkin(Control skin)
{
{
}
}
他继承了SkinnedForumWebControl这个类,这个类是处理皮肤控件的基类,这个类定义了怎么通过一个用户控件名称来生成控件
protected string skinFilename = "Skin-Default.ascx";
说明这个控件是由Skin-Default.ascx来生成页面控件的
protected string skinFilename = "Skin-Default.ascx";
说明这个控件是由Skin-Default.ascx来生成页面控件的
这样就可以直接通过定义一个界面的ascx文件来生成我所需要的界面,这样起到代码和界面的完全分离,
但是我又怎么取用户控件中的代码呢?以及控件的事件呢?
让我们看看login.cs这个登陆控件的代码
但是我又怎么取用户控件中的代码呢?以及控件的事件呢?
让我们看看login.cs这个登陆控件的代码
//初始化控件
override protected void InitializeSkin(Control skin)
{
override protected void InitializeSkin(Control skin)
{
// Find the username control
username = (TextBox) skin.FindControl("username");
username = (TextBox) skin.FindControl("username");
// Find the password control
password = (TextBox) skin.FindControl("password");
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");
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");
autoLogin = (CheckBox) skin.FindControl("autoLogin");
autoLogin.Text = ResourceManager.GetString("LoginSmall_AutoLogin");
}
看其中采用了skin.FindControl的方式来找到我所需要的控件,名称是我在ascx定义好的。
事件和方法等等都是通过这种方式。
事件和方法等等都是通过这种方式。
所以这里边和普通的usercontrol是不同的,其实这里面用到的确切一点说应该是复合控件,
只不过他的复合控件中的控件是通过usercontrol来提供的。
只不过他的复合控件中的控件是通过usercontrol来提供的。