using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
//自定义web服务器登录控件-<服务器标签>
namespace MyControls
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:MyLogin2 runat=server></{0}:MyLogin2>")]
public class MyLogin2 : WebControl
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string lblUserNameText //用户名span
{
get
{
String s = (String)ViewState["lblUserNameText"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["lblUserNameText"] = value;
}
}
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string lblUserPasswordText //用户密码span
{
get
{
String s = (String)ViewState["lblUserPasswordText"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["lblUserPasswordText"] = value;
}
}
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string UserErrMsg //用户名的错误信息提示
{
get
{
return rfvUserName.ErrorMessage;
}
set
{
rfvUserName.ErrorMessage = value;
}
}
protected override void RenderContents(HtmlTextWriter writer)
{
base.RenderContents(writer);
}
private TextBox txtUserName = new TextBox();
private TextBox txtUserPassword = new TextBox();
private RequiredFieldValidator rfvUserName = new RequiredFieldValidator();
protected override void OnInit(EventArgs e)
{
HtmlGenericControl pUserName = new HtmlGenericControl("p");
Controls.Add(pUserName);//将此段落加到所有控件集里面
HtmlGenericControl spanUserName = new HtmlGenericControl("span");
spanUserName.InnerText = lblUserNameText; //设置span文字
pUserName.Controls.Add(spanUserName);//将用户名的span添加到此段落
txtUserName.ID = "txtUserName"; //用户名的ID
pUserName.Controls.Add(txtUserName); //将用户名文本框添加到此段落
rfvUserName.ControlToValidate = "txtUserName"; //验证用户名
pUserName.Controls.Add(rfvUserName); //将验证用户名是否为空验证控件添加到此段落
HtmlGenericControl pUserPassword = new HtmlGenericControl("p"); //增加一个段落存放用户密码
Controls.Add(pUserPassword);//将段落放到所有控件里面去
HtmlGenericControl spanUserPassword = new HtmlGenericControl("span");
spanUserPassword.InnerText = lblUserPasswordText;
pUserPassword.Controls.Add(spanUserPassword);//将密码span添加到此段落里面去
txtUserPassword.ID = "txtUserPassword"; //设置密码的ID
pUserPassword.Controls.Add(txtUserPassword);//将用户密码文本框添加到此段落
txtUserPassword.TextMode = TextBoxMode.Password;//设置文本框为密码框
HtmlGenericControl pBtnSubmit = new HtmlGenericControl("p");//新建一个段落
Controls.Add(pBtnSubmit);//添加此段落到所有控件里面去
Button btnSubmit = new Button();
btnSubmit.Text = "提交";
pBtnSubmit.Controls.Add(btnSubmit);//将按钮添加到此段落
btnSubmit.Width = 238;
btnSubmit.Height = 25;
btnSubmit.Click += new EventHandler(btnSubmit_Click);
base.OnInit(e);
}
public delegate void LoginHandle(string userName, string userPassword);//定义一个委托
private object key;
public event LoginHandle Login {
add {
this.Events.AddHandler(key, value);
}
remove {
this.Events.RemoveHandler(key, value);
}
}
void btnSubmit_Click(object sender, EventArgs e)
{
LoginHandle handle = (LoginHandle)base.Events[key];
if (handle != null) {
handle(txtUserName.Text,txtUserPassword.Text);
}
}
}
}
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register assembly="MyControls" namespace="MyControls" tagprefix="cc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<!-- 自定义服务器登录控件(服务器标签) -->
<cc1:MyLogin2 ID="MyLogin2" lblUserNameText="用户名:" OnLogin="OnLogin2" lblUserPasswordText="密 码:" UserErrMsg="用户名不能为空" runat="server" />
</div>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
//登录验证事件
protected void OnLogin2(string username, string userpassword) {
Response.Write("我是服务器的自定义登录控件");
}
}