Mit der heutigen Veröffentlichung von AJAX.NET BETA 2 haben wir gesehen, wie schnell und effizient die enge Integration von AJAX und ASP.NET 2.0 ist. Wir können ASP.NET-Webseiten sogar effizienter machen, ohne einen einzigen JS-Code zu schreiben. Kostenloser Effekt, der durch stundenlanges Schreiben von JS-Code erreicht wird. Es ist so einfach, das alles in ASP.NET zu integrieren. Sie müssen lediglich das Steuerelement in das UPDATEPANEL-Steuerelement verschieben und einige Parameter festlegen. Während Sie jedoch den Komfort erleben, den AJAX.NET Entwicklern bietet, werden Sie auch feststellen, dass AJAX.NET manchmal nicht perfekt ist. So wie der Autor kürzlich auf einen Fehler im ASP.NET 2.0-Anmeldesteuerelement gestoßen ist, der die Seite nach erfolgreicher Überprüfung der Benutzerinformationen in UPDATEPANEL aktualisiert. Offensichtlich verstößt dies gegen das Prinzip der AJAX-Keine Aktualisierung. Nach der Analyse der in das Anmeldesteuerelement integrierten Benutzerinformationen Die Methode zur Überprüfung der Identitätsinformationen hat den folgenden Code gefunden:
private void AttemptLogin()
{
LoginCancelEventArgs args1 = new LoginCancelEventArgs();
this.OnLoggingIn(args1);
if (!args1.Cancel)
{
AuthenticateEventArgs args2 = new AuthenticateEventArgs();
this.OnAuthenticate(args2);
if (args2.Authenticated)
{
// Nachdem die Benutzerinformationen erfolgreich überprüft wurden, schreiben Sie COOKIE-Informationen für den Client.
FormsAuthentication.SetAuthCookie(this.UserNameInternal, this.RememberMeSet);
this.OnLoggedIn(EventArgs.Empty);
//Es ist die folgende Antwortanweisung, die Probleme verursacht. Das Ausführen einer Umleitungsoperation im UPDATEPANEL-Steuerelement führt dazu, dass die Seite aktualisiert wird.
this.Page.Response.Redirect(this.GetRedirectUrl(), false);
}
}
}
Durch die Analyse der AttemptLogin-Methode ist es nicht schwer zu erkennen, dass, wenn wir die Anmeldeschaltfläche des Login-Steuerelements drücken und die Benutzerinformationen erfolgreich überprüfen, eine Response.Redirect-Seitenumleitungsanweisung ausgeführt wird (dieser Code wird auch dann ausgeführt, wenn die Umleitung erfolgt). Seite ist nicht angegeben und der Standardwert ist die aktuelle Seite) und genau aufgrund der Seitenumleitung wird die Seite aktualisiert. Sobald Sie die Ursache des Fehlers kennen, wird es einfacher sein, damit umzugehen. Vielleicht wird jemand sagen, dass das benutzerdefinierte Steuerelement das Login-Steuerelement erben und die AttemptLogin-Methode überschreiben kann. Aber gibt es neben benutzerdefinierten Steuerelementen auch eine einfachere Möglichkeit? Die Antwort lautet „Ja“. Da es der integrierte Überprüfungsmechanismus ist, der die Aktualisierung der Seite bewirkt, verwenden Sie einfach nicht die Überprüfungsverarbeitung des Login-Steuerelements, sondern verwenden Sie eine benutzerdefinierte Methode, um die Überprüfung der Benutzeridentität durchzuführen. Um eine benutzerdefinierte Überprüfungsmethode zu verwenden, suchen wir zunächst das Login-Steuerelement und konvertieren es in eine Vorlage. Anschließend suchen wir das LoginButton-Steuerelement in der Vorlage und entfernen CommandName="Login", sodass das Steuerelement das integrierte Steuerelement nicht mehr verwendet. In-Methode zur Überprüfung Nachdem wir nun Benutzerinformationen haben, fügen wir dem LoginButton ein OnClick-Ereignis hinzu.
protected void LoginButton_Click(object sender, EventArgs e)
{
//Überprüfen Sie, ob Benutzername und Passwort korrekt sind
if (Membership.ValidateUser(Login1.UserName, Login1.Password))
{
//Schreiben Sie gemäß der obigen Analyse des Anmeldeüberprüfungsmechanismus ein COOKIE für den Client.
FormsAuthentication.SetAuthCookie(Login1.UserName, Login1.RememberMeSet);
// Nach erfolgreicher Überprüfung können Sie hier einige Verarbeitungsvorgänge durchführen, z. B. das Anmeldesteuerelement ausblenden.
Login1.Visible = false;
}
anders
{
//Da der integrierte Überprüfungsmechanismus nicht verwendet wird, muss die Behandlung von Überprüfungsfehlern selbst eingerichtet werden.
(Login1.FindControl("FailureText") as Literal).Text = "Der Benutzername oder das Passwort ist falsch, bitte versuchen Sie es erneut!";
}
}
Analysieren Sie den obigen Code. Die vom Login-Steuerelement zu überprüfenden Benutzerinformationen werden in der Aspnetdb-Datenbank von SQL2005 gespeichert. Auf diese Weise können wir die Benutzerinformationen mithilfe der Membership.ValidateUser-Methode problemlos überprüfen Wenn die Überprüfung erfolgreich ist, befolgen Sie die obige Analyse. Die AttemptLogin-Methode schreibt COOKIE für den Client und legt dann die Fehlermeldung fest, dass die Überprüfung fehlschlägt. Anschließend können wir unser Anmeldesteuerelement problemlos so umwandeln, dass es nach erfolgreicher Überprüfung der Benutzerinformationen nicht mehr aktualisiert wird Es besteht keine Notwendigkeit, ein benutzerdefiniertes Steuerelement zu schreiben. Das Steuerelement ist genauso komplex wie das ursprüngliche Anmeldesteuerelement und der Effekt ist genau der gleiche wie beim ursprünglichen Anmeldesteuerelement. Der vom CreateUserWizard-Steuerelement erstellte Benutzername kann weiterhin zur Überprüfung und Steuerung verwendet werden Im Zusammenhang mit dem Login-Steuerelement wie LoginStatus und LoginName können ebenfalls wie gewohnt verwendet werden.
PS: Wenn eine PageRequestManagerParserErrorException auftritt, wenn das Login-Steuerelement Benutzerinformationen überprüft, überprüfen Sie bitte, ob web.config diesen Satz enthält:
<httpModules>
.....
<add name="ScriptModule" type="Microsoft.Web.UI.ScriptModule, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>
Danke, Saucer, für die Erinnerung:
http://www.cnblogs.com/aspxcn/archive/2006/11/07/552927.html