打造登陆控件(转载)

我们在开发系统的时候,登陆验证是必不可少的一个环节。而登陆的时候,不外乎就是验证用户名和密码,步骤多一点的,可以加入一个验证码,以至于加密什么的。下面这个示例,说明了如何打造一个通用的登陆验证控件,其实用性可以进一步改造

 

using System;
using System.Web.UI;
using System.Web.UI.Design;
using System.ComponentModel;
using System.ComponentModel.Design;

namespace YuanHeng.ServerControls
{
 [
 Designer(typeof(YuanHeng.ServerControls.Design.CompositeControlDesigner))
 ]
 public class CompositeControl : System.Web.UI.WebControls.WebControl,System.Web.UI.INamingContainer
 {
  public override ControlCollection Controls
  {
   get
   {
    this.EnsureChildControls();
    return base.Controls;
   }
  }
 }
}
======================

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace YuanHeng.ServerControls
{
 [
 DefaultEvent("Logon"),
 DefaultProperty("Name")
 ]
 public class LoginUI : YuanHeng.ServerControls.CompositeControl
 {
  private Button _button;
  private TextBox _nameTextBox;
  private Label _nameLabel;
  private TextBox _passwordTextBox;
  private Label _passwordLabel;     
  private RequiredFieldValidator _nameValidator;
  private RequiredFieldValidator _passwordValidator;
  private static readonly object EventLogon = new object();

  #region 制定控件中子控件的属性
  [
  Bindable(true),
  Category("Appearance"),
  DefaultValue(typeof(Unit), ""),
  Description("该输入文本框的宽度。")
  ]
  public Unit InputWidth
  {
   set
   {
    EnsureChildControls();
    _passwordTextBox.Width = value;
    _nameTextBox.Width=value;
   }
  }

  [
  Bindable(true),
  Category("Appearance"),
  DefaultValue(""),
  Description("该登录按钮要显示的文本。")
  ]
  public string ButtonText
  {
   get
   {
    EnsureChildControls();
    return _button.Text;
   }
   set
   {
    EnsureChildControls();
    _button.Text = value;
   }
  }

  [
  Bindable(true),
  Category("Appearance"),
  DefaultValue(""),
  Description("用户名称。")
  ]
  public string Name
  {
   get
   {
    EnsureChildControls();
    return _nameTextBox.Text;
   }
   set
   {
    EnsureChildControls();
    _nameTextBox.Text = value;
   }
  }

  [
  Bindable(true),
  Category("Appearance"),
  DefaultValue(""),
  Description(
   "用户登录名称验证时要显示的出错文本。")
  ]
  public string NameErrorMessage
  {
   get
   {
    EnsureChildControls();
    return _nameValidator.ErrorMessage;
   }
   set
   {
    EnsureChildControls();
    _nameValidator.ErrorMessage = value;
    _nameValidator.ToolTip = value;
   }
  }

  [
  Bindable(true),
  Category("Apperance"),
  DefaultValue(""),
  Description("该名称标签要显示的文本。")
  ]
  public string NameLabel
  {
   get
   {
    EnsureChildControls();
    return _nameLabel.Text;
   }
   set
   {
    EnsureChildControls();
    _nameLabel.Text = value;

   }
  }

  [
  Browsable(false),
  DesignerSerializationVisibility(
   DesignerSerializationVisibility.Hidden)
  ]
  public string Password
  {
   get
   {
    EnsureChildControls();
    return _passwordTextBox.Text;
   }
  }

  [
  Bindable(true),
  Category("Appearance"),
  DefaultValue(""),
  Description(
   "用户登录密码验证时要显示的出错文本。")
  ]
  public string PasswordErrorMessage
  {
   get
   {
    EnsureChildControls();
    return _passwordValidator.ErrorMessage;
   }
   set
   {
    EnsureChildControls();
    _passwordValidator.ErrorMessage = value;
    _passwordValidator.ToolTip = value;
   }
  }

  [
  Bindable(true),
  Category("Appearance"),
  DefaultValue(""),
  Description("该密码标签要显示的文本。")
  ]
  public string PasswordLabel
  {
   get
   {
    EnsureChildControls();
    return _passwordLabel.Text;
   }
   set
   {
    EnsureChildControls();
    _passwordLabel.Text = value;

   }
  }
  #endregion

  #region 事件
  [
  Category("Action"),
  Description("在用户点击登录按钮时激发。")
  ]
  public event EventHandler Logon
  {
   add
   {
    Events.AddHandler(EventLogon, value);
   }
   remove
   {
    Events.RemoveHandler(EventLogon, value);
   }
  }

  protected virtual void OnLogon(EventArgs e)
  {
   EventHandler logonHandler = (EventHandler)Events[EventLogon];
   if (logonHandler != null)
   {
    logonHandler(this, e);
   } 
  }
  #endregion

  #region Event bubbling
  protected override bool OnBubbleEvent(object source, EventArgs e)
  {  
   bool handled = false;
   if (e is CommandEventArgs)
   {
    CommandEventArgs ce = (CommandEventArgs)e;
    if (ce.CommandName == "Logon")
    {
     OnLogon(EventArgs.Empty);
     handled = true;  
    } 
   }
   return handled;           
  }
  #endregion Event bubbling    

  #region 覆盖父类方法
  protected override void CreateChildControls()
  {
   Controls.Clear();

   _nameLabel = new Label();
                          
   _nameTextBox = new TextBox();
   _nameTextBox.ID = "nameTextBox";
   
           
   _nameValidator = new RequiredFieldValidator();
   _nameValidator.ID = "validator1";
   _nameValidator.ControlToValidate = _nameTextBox.ID;
   _nameValidator.Text = "*";
   _nameValidator.Display = ValidatorDisplay.Static;
   
   _passwordLabel = new Label();
           
   _passwordTextBox = new TextBox();
   _passwordTextBox.TextMode = TextBoxMode.Password;
   _passwordTextBox.ID = "passwordTextBox";
   
           
   _passwordValidator = new RequiredFieldValidator();
   _passwordValidator.ID = "validator2";
   _passwordValidator.ControlToValidate = _passwordTextBox.ID;
   _passwordValidator.Text = "*";
   _passwordValidator.Display = ValidatorDisplay.Static;

   _button = new Button();
   _button.ID = "button1";
   _button.CommandName = "Logon";

   FirstFocus _firstFocus = new FirstFocus();
   _firstFocus.ControlToFocus = "nameTextBox";
   
   this.Controls.Add(_nameLabel);
   this.Controls.Add(_nameTextBox);
   this.Controls.Add(_nameValidator);
   this.Controls.Add(_passwordLabel);
   this.Controls.Add(_passwordTextBox);
   this.Controls.Add(_passwordValidator);
   this.Controls.Add(_button);
   this.Controls.Add(_firstFocus);
  }

  protected override void Render(HtmlTextWriter writer)
  {
   AddAttributesToRender(writer);

   writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding,
    "1", false);
   writer.RenderBeginTag(HtmlTextWriterTag.Table);

   writer.RenderBeginTag(HtmlTextWriterTag.Tr);
   writer.RenderBeginTag(HtmlTextWriterTag.Td);
   _nameLabel.RenderControl(writer);                 
   writer.RenderEndTag();  // Td
   writer.RenderBeginTag(HtmlTextWriterTag.Td);
   _nameTextBox.RenderControl(writer);
   writer.RenderEndTag();  // Td
   writer.RenderBeginTag(HtmlTextWriterTag.Td);
   _nameValidator.RenderControl(writer);     
   writer.RenderEndTag();  // Td
   writer.RenderEndTag();  // Tr

   writer.RenderBeginTag(HtmlTextWriterTag.Tr);
   writer.RenderBeginTag(HtmlTextWriterTag.Td);         
   _passwordLabel.RenderControl(writer);
   writer.RenderEndTag();  // Td
   writer.RenderBeginTag(HtmlTextWriterTag.Td);
   _passwordTextBox.RenderControl(writer);
   writer.RenderEndTag();  // Td
   writer.RenderBeginTag(HtmlTextWriterTag.Td);
   _passwordValidator.RenderControl(writer);
   writer.RenderEndTag();  // Td
   writer.RenderEndTag();  // Tr

   writer.RenderBeginTag(HtmlTextWriterTag.Tr);
   writer.AddAttribute(HtmlTextWriterAttribute.Colspan, "2");
   writer.AddAttribute(HtmlTextWriterAttribute.Align, "right");
   writer.RenderBeginTag(HtmlTextWriterTag.Td);
   _button.RenderControl(writer);
   writer.RenderEndTag();  // Td
   writer.RenderBeginTag(HtmlTextWriterTag.Td);
   writer.Write(" ");
   writer.RenderEndTag();  // Td
   writer.RenderEndTag();  // Tr

   writer.RenderEndTag();  // Table
  }
  #endregion Overriden methods
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值