本日の AJAX.NET BETA 2 のリリースにより、AJAX と ASP.NET 2.0 の緊密な統合がどれほど高速で効率的であるかがわかり、JS コードを 1 つも作成せずに ASP.NET Web ページをより効率的にできるようになりました。何時間もかけて書かれた JS コードで得られる無料の効果。これらすべてを ASP.NET に統合するのは非常に簡単です。必要なのは、コントロールを UPDATEPANEL コントロールに移動し、いくつかのパラメーターを設定するだけです。ただし、AJAX.NET が開発者にもたらす利便性を実感する一方で、AJAX.NET が完全ではないこともあることに気づくでしょう。作者が最近、UPDATEPANEL でユーザー情報を正常に検証した後にページを更新するという ASP.NET 2.0 ログイン コントロールのバグに遭遇したのと同じように、これは明らかに、ログイン コントロールに組み込まれたユーザー情報を分析した後に更新しないという AJAX の原則に違反しています。 ID 情報検証のメソッドで次のコードが見つかりました:
private void AttemptLogin()
{
LoginCancelEventArgs args1 = new LoginCancelEventArgs();
this.OnLoggingIn(args1);
if (!args1.Cancel)
{
AuthenticateEventArgs args2 = 新しい AuthenticateEventArgs();
this.OnAuthenticate(args2);
if (args2.Authenticated)
{
//ユーザー情報の検証が成功したら、クライアントの COOKIE 情報を書き込みます。
FormsAuthentication.SetAuthCookie(this.UserNameInternal, this.RememberMeSet);
this.OnLoggedIn(EventArgs.Empty);
//UPDATEPANEL コントロールでリダイレクト操作を実行すると、ページが更新されます。
this.Page.Response.Redirect(this.GetRedirectUrl(), false);
}
}
}
AttemptLogin メソッドを分析すると、Login コントロールのログイン ボタンを押してユーザー情報の検証に成功すると、Response.Redirect ページ リダイレクト ステートメントが実行されることがわかります (このコードはリダイレクトされても実行されます)。ページは指定されておらず、デフォルトは現在のページです)。ページが更新されるのはまさにページ リダイレクトのためです。エラーの原因がわかれば、対処が簡単になるかもしれません。カスタム コントロールは Login コントロールを継承して AttemptLogin メソッドをオーバーライドできると言うかもしれません。しかし、カスタム コントロール以外にもっと簡単な方法はあるでしょうか。答えは「はい」です。ページを更新するのは組み込みの検証メカニズムであるため、ログイン コントロールの検証処理を使用せず、カスタム メソッドを使用してユーザーの ID の検証を処理します。まず、カスタム検証方法を使用するために、まず Login コントロールを見つけてテンプレートに変換します。次に、テンプレート内で LoginButton コントロールを見つけ、CommandName="Login" を削除して、コントロールが組み込みのメソッドを使用しないようにします。ユーザー情報を取得したので、LoginButton に OnClick イベントを追加します。コードは次のとおりです。
protected void LoginButton_Click(オブジェクト送信者、EventArgs e)
{
// ユーザー名とパスワードが正しいかどうかを確認します
if (Membership.ValidateUser(Login1.UserName, Login1.Password))
{
//上記のログイン検証メカニズムの分析に従って、クライアント用の COOKIE を書き込みます。
FormsAuthentication.SetAuthCookie(Login1.UserName, Login1.RememberMeSet);
//検証が成功したら、ここでログイン コントロールの非表示などの処理を実行できます。
Login1.Visible = false;
}
それ以外
{
//組み込みの検証メカニズムを使用しないため、検証失敗の処理を自分で設定する必要があります。
(Login1.FindControl("FailureText") as Literal).Text = "ユーザー名またはパスワードが間違っています。もう一度お試しください。";
}
と
、Login コントロールで検証するユーザー情報は、SQL2005 の Aspnetdb データベースの aspnet_membership テーブルに格納されているため、Membership.ValidateUser メソッドを使用して簡単に検証できます。検証が成功した場合は、上記の分析に従ってください。 AttemptLogin メソッドは、クライアントの COOKIE を書き込み、検証失敗のエラー メッセージを設定します。これにより、ユーザー情報の検証が成功した後にログイン コントロールを簡単に変更できます。この変換の利点は次のとおりです。カスタムを記述する必要がないということは、コントロールは元の Login コントロールと同じくらい複雑で、その効果は元の Login コントロールとまったく同じです。CreateUserWizard コントロールによって作成されたユーザー名は引き続き検証に使用できます。 LoginStatusやLoginNameなどのログインコントロールに関連するものも通常通り使用できます。
PS: ログイン コントロールがユーザー情報を検証するときに PageRequestManagerParserErrorException が発生した場合は、web.config に次の文が含まれているかどうかを確認してください。
<httpモジュール>
……
<add name="ScriptModule" type="Microsoft.Web.UI.ScriptModule, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>
思い出させてくれてありがとう
http://www.cnblogs.com/aspxcn/archive/2006/11/07/552927.html