复合登录控件






1.12/5 (9投票s)
2006 年 5 月 16 日

29919

624
本文展示了如何实现复合服务器控件以提供登录功能。
引言
本文档展示了复合服务器控件的实现。创建此控件的目的是创建一个在网站中常用登录控件。 复合控件使用子控件来实现其功能。它包含 Label 控件以显示文本,TextBox 控件以获取用户的值,以及 RequiredFieldValidator 控件以验证用户输入的数据。它还包含一个 Button 控件以将数据提交到服务器。
"userTextBox" 用于获取“用户名”的值,"passTextBox" 用于获取“密码”的值,其 TextMode 设置为“密码”。最后,一个按钮控件用于提交数据。

技术实现
Comp.cs (类库)
using System; using System.ComponentModel; using System.Drawing; using System.Security.Permissions; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Controls { public class comp : CompositeControl { #region private control variables private Label userLabel; private Label passLabel; private Button submitButton; private TextBox userTextBox; private TextBox passTextBox; private RequiredFieldValidator userValidator; private static readonly object EventSubmitKey = new object(); #endregion #region Public Attributespublic string userName
{
get
{
EnsureChildControls();
return userTextBox.Text;
}
set
{
EnsureChildControls();
userTextBox.Text = value;
}
}
public string Password
{
get
{
EnsureChildControls();
return passTextBox.Text;
}
set
{
EnsureChildControls();
passTextBox.Text = value;
}
}
[Category("Action"),Description("Fires when user click on the Submit Button")] public event EventHandler Submit { add { Events.AddHandler(EventSubmitKey, value); } remove { Events.RemoveHandler(EventSubmitKey, value); } } #endregion #region Button Events protected virtual void OnSubmit(EventArgs e) { EventHandler SubmitHandler = (EventHandler)Events[EventSubmitKey]; if (SubmitHandler != null) { SubmitHandler(this, e); } } private void _button_Click(object source, EventArgs e) { OnSubmit(EventArgs.Empty); } #endregion #region override CreateChildControls/Render Methods protected override void CreateChildControls() { Controls.Clear(); userLabel = new Label(); userLabel.Text = "User Name"; userTextBox = new TextBox(); userTextBox.ID = "nameTextBox"; userValidator = new RequiredFieldValidator(); userValidator.ID = "validator1"; userValidator.ControlToValidate = userTextBox.ID; userValidator.ErrorMessage = "*"; userValidator.Display = ValidatorDisplay.Static; passLabel = new Label(); passLabel.Text = "Password"; passTextBox = new TextBox(); passTextBox.ID = "passTextBox"; passTextBox.TextMode = TextBoxMode.Password; submitButton = new Button(); submitButton.ID = "button1"; submitButton.Text = "Login"; submitButton.Click += new EventHandler(_button_Click); this.Controls.Add(userLabel); this.Controls.Add(userTextBox); this.Controls.Add(passTextBox); this.Controls.Add(userValidator); this.Controls.Add(passLabel); this.Controls.Add(submitButton); } 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); userLabel.RenderControl(writer); writer.RenderEndTag(); writer.RenderBeginTag(HtmlTextWriterTag.Td); userTextBox.RenderControl(writer); writer.RenderEndTag(); writer.RenderBeginTag(HtmlTextWriterTag.Td); userValidator.RenderControl(writer); writer.RenderEndTag(); writer.RenderEndTag(); writer.RenderBeginTag(HtmlTextWriterTag.Tr); writer.RenderBeginTag(HtmlTextWriterTag.Td); passLabel.RenderControl(writer); writer.RenderEndTag(); writer.RenderBeginTag(HtmlTextWriterTag.Td); passTextBox.RenderControl(writer); writer.RenderEndTag(); writer.RenderEndTag(); writer.RenderBeginTag(HtmlTextWriterTag.Tr); writer.AddAttribute(HtmlTextWriterAttribute.Colspan,"2", false); writer.AddAttribute(HtmlTextWriterAttribute.Align,"right", false); writer.RenderBeginTag(HtmlTextWriterTag.Td); submitButton.RenderControl(writer); writer.RenderEndTag(); writer.RenderBeginTag(HtmlTextWriterTag.Td); writer.Write(" "); writer.RenderEndTag(); writer.RenderEndTag(); writer.RenderEndTag(); } } #endregion #region public class // This class inherits from System.Web.UI.WebControls.WebControl and implements interface INamingContainer public class CompositeControl : System.Web.UI.WebControls.WebControl, INamingContainer { } #endregion }
现在,您需要构建上述类库并将其引用添加到您的 Web 应用程序。
只需插入注册标签即可
<%@ Register TagPrefix="vik" Namespace="Controls" Assembly="Control" %> <vik:comp runat="server" id="Comp1"></vik:comp>
private void Comp1_Submit(object sender, System.EventArgs e){
Response.Write(Comp1.userName);
Response.Write(Comp1.Password);
}