ajaxLoginCtrl4StudyezCom
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
namespace AjaxControl
{
/// <summary>
///AjaxLogin 的摘要说明
/// </summary>
public class AjaxLogin:CompositeControl
{
private AjaxLoginContainer _templateContainer;
private ITemplate _loginTemplate;
[PersistenceMode(PersistenceMode.InnerProperty ),TemplateContainer(typeof(AjaxLogin ))]
public ITemplate LayoutTemplate
{
get
{
return this._loginTemplate;
}
set
{
this._loginTemplate =value;
base.ChildControlsCreated = false;
}
}
public AjaxLogin()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Div;
}
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!Page.ClientScript.IsClientScriptBlockRegistered(Page.GetType(), "js4ajaxLoginControl"))
{
Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "js4ajaxLoginControl", "<script language=/"javascript/" type=/"text/javascript/" src=/"ajaxLogin.js/" ></script>", false);
}
}
protected override void CreateChildControls()
{
this.Controls.Clear();
this._templateContainer = new AjaxLoginContainer(this);
ITemplate layoutTemplate = this.LayoutTemplate;
if (layoutTemplate == null)
{
this._templateContainer.EnableViewState = false;
this._templateContainer.EnableTheming = false;
layoutTemplate = new AjaxLoginTemplate(this);
}
layoutTemplate.InstantiateIn(this._templateContainer);
this.Controls.Add(this._templateContainer);
}
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), this.UniqueID))
{
Control uLv = this.FindControl("LoginView");
Control uLs = this.FindControl("LoginStatus");
Control uName = this.FindControl("UserName");
Control uPwd = this.FindControl("Password");
Control uLi = this.FindControl("LoginIn");
Control uLo = this.FindControl("LoginOut");
Control uCs = this.FindControl("CurrentUser");
Control uRm = this.FindControl("RememberMe");
string uRmId = "";
if (uRm == null)
{
uRmId = "";
}
else
{
uRmId = uRm.ClientID;
}
AjaxLoginContainer ajc = this._templateContainer;
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.AppendLine("<script language=/"javascript/" type=/"text/javascript/">");
sb.AppendFormat("var jx_{0}=new ajaxLogin(/"{0}/",/"{1}/",/"{2}/",/"{3}/",/"{4}/",/"{5}/",/"{6}/",/"{7}/",/"{8}/");",
this.ClientID, uLv.ClientID, uName.ClientID, uPwd.ClientID, uLi.ClientID,
uLs.ClientID, uCs.ClientID, uLo.ClientID,uRmId);
sb.AppendFormat("jx_{0}.isOnline(jx_{0}.onCheckUserCompleted,jx_{0}.onHttpStatusError);", this.ClientID);
sb.AppendFormat("</script>");
Page.ClientScript.RegisterStartupScript(this.GetType(), this.UniqueID, sb.ToString(), false);
}
}
private sealed class AjaxLoginTemplate : ITemplate
{
private AjaxLogin _owner;
public AjaxLoginTemplate(AjaxLogin owner)
{
this._owner = owner;
}
#region ITemplate 成员
public void InstantiateIn(Control container)
{
}
#endregion
private void CreateControls(AjaxLoginContainer loginContainer)
{
TextBox tb = new TextBox();
tb.ID = "UserName";
tb.TextMode = TextBoxMode.SingleLine;
loginContainer.UserName = tb;
TextBox pwd = new TextBox();
pwd.ID = "Password";
pwd.TextMode = TextBoxMode.Password;
loginContainer.Password = pwd;
Button lgIn = new Button();
lgIn.ID = "LoginIn";
lgIn.Text = "登录";
lgIn.UseSubmitBehavior = false;
loginContainer.LoginInButton = lgIn;
CheckBox cb = new CheckBox();
cb.ID = "RememberMe";
cb.Text = "RememberMe";
loginContainer.RememberMe = cb;
Label lgN = new Label();
lgN.ID = "CurrentUser";
lgN.Text = "";
loginContainer.CurrentUser = lgN;
Button lgOut = new Button();
lgOut.ID = "LoginOut";
lgOut.Text = "注销";
lgOut.UseSubmitBehavior = false;
loginContainer.LoginOutButton = lgOut;
Panel lgView = new Panel();
lgView.ID = "LoginView";
loginContainer.LoginView = lgView;
Panel lgStatus = new Panel();
lgStatus.ID = "LoginStatus";
loginContainer.LoginStatus = lgStatus;
}
}
internal sealed class AjaxLoginContainer : WebControl
{
public TextBox UserName;
public TextBox Password;
public CheckBox RememberMe;
public Button LoginInButton;
public Label CurrentUser;
public Button LoginOutButton;
public Panel LoginView;
public Panel LoginStatus;
private AjaxLogin _owner;
public AjaxLoginContainer(AjaxLogin owner)
{
_owner = owner;
}
public override void RenderBeginTag(HtmlTextWriter writer)
{
}
public override void RenderEndTag(HtmlTextWriter writer)
{
}
}
}
}
-----------------------Usage--------------------
<jx:AjaxLogin ID="lgView" runat="server">
<LayoutTemplate>
<asp:Panel ID="LoginView" runat="server">
用户名:<asp:TextBox ID="UserName" runat="server"></asp:TextBox>密码:<asp:TextBox ID="Password" TextMode="Password" runat="server" ></asp:TextBox>
<asp:Button ID="LoginIn" Text="LoginIn" runat="server"/>
</asp:Panel>
<asp:Panel ID="LoginStatus" runat="server">
<asp:Label ID="CurrentUser" runat="server" ></asp:Label><asp:Button ID="LoginOut" Text="LoginOut" runat="server" />
</asp:Panel>
</LayoutTemplate>
</jx:AjaxLogin>