P653 Listing 21-21
void
OnLogin(
object
sender, EventArgs e)
{
if (CustomComponents.Membership.ValidateUser(userNameTextBox.Text,
passwordTextBox.Text))
{
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 1,
userNameTextBox.Text, DateTime.Now,
DateTime.Now.AddSeconds(40),false, string.Empty);
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName);
cookie.Value = encryptedTicket;
Page.Response.Cookies.Add(cookie);
EnsureChildControls();
Page.Response.Redirect(
FormsAuthentication.GetRedirectUrl(userNameTextBox.Text, false), true);
}
}
{
if (CustomComponents.Membership.ValidateUser(userNameTextBox.Text,
passwordTextBox.Text))
{
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket( 1,
userNameTextBox.Text, DateTime.Now,
DateTime.Now.AddSeconds(40),false, string.Empty);
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName);
cookie.Value = encryptedTicket;
Page.Response.Cookies.Add(cookie);
EnsureChildControls();
Page.Response.Redirect(
FormsAuthentication.GetRedirectUrl(userNameTextBox.Text, false), true);
}
}
对于EnsureChildControls()的调用,作者解释:
The OnLogin method calls the EnsureChildControls method before the call into the Redirect method because it passes the value of the Text property of the username TextBox into the Redirect method. Recall that every composite
control must call the EnsureChildControls method before it attempts to access its child controls:
但是之前的代码早已经access its child controls了。奇怪。
if (CustomComponents.Membership.ValidateUser(userNameTextBox.Text,
passwordTextBox.Text))