65.9K
CodeProject 正在变化。 阅读更多。
Home

复合登录控件

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.12/5 (9投票s)

2006 年 5 月 16 日

viewsIcon

29919

downloadIcon

624

本文展示了如何实现复合服务器控件以提供登录功能。

引言

本文档展示了复合服务器控件的实现。创建此控件的目的是创建一个在网站中常用登录控件  复合控件使用子控件来实现其功能。它包含 Label 控件以显示文本,TextBox 控件以获取用户的值,以及 RequiredFieldValidator 控件以验证用户输入的数据。它还包含一个 Button 控件以将数据提交到服务器。

"userTextBox" 用于获取“用户名”的值,"passTextBox" 用于获取“密码”的值,其 TextMode 设置为“密码”。最后,一个按钮控件用于提交数据。

Sample image

技术实现

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 Attributes

public 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);

}

© . All rights reserved.