오늘 AJAX.NET BETA 2가 출시되면서 AJAX와 ASP.NET 2.0의 긴밀한 통합이 얼마나 빠르고 효율적인지 확인했습니다. 단일 JS 코드를 작성하지 않고도 ASP.NET 웹 페이지를 더욱 효율적으로 만들 수 있습니다. 몇 시간의 JS 코드 작성으로 무료 효과를 얻을 수 있습니다. 이 모든 것을 ASP.NET에 통합하는 것은 매우 쉽습니다. 컨트롤을 UPDATEPANEL 컨트롤로 이동하고 몇 가지 매개 변수만 설정하면 됩니다. 그러나 AJAX.NET이 개발자에게 제공하는 편리함을 경험하는 동안 AJAX.NET이 때때로 완벽하지 않다는 사실도 알게 될 것입니다. 작성자가 최근 UPDATEPANEL에서 사용자 정보를 성공적으로 확인한 후 페이지를 새로 고치는 ASP.NET 2.0 로그인 컨트롤에서 버그를 발견한 것처럼 이는 명백히 로그인 컨트롤에 내장된 사용자 정보를 분석한 후 AJAX no 새로 고침 원칙을 위반하는 것입니다. 신원 정보 확인 방법에서 다음 코드가 발견되었습니다.
private void AttemptLogin()
{
LoginCancelEventArgs args1 = 새로운 LoginCancelEventArgs();
this.OnLoggingIn(args1);
if (!args1.취소)
{
AuthenticateEventArgs args2 = 새로운 AuthenticateEventArgs();
this.OnAuthenticate(args2);
if (args2.인증됨)
{
//사용자 정보가 성공적으로 검증된 후 클라이언트에 대한 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 확인을 처리하세요. 먼저 사용자 지정 확인 방법을 사용하려면 먼저 로그인 컨트롤을 찾아 템플릿으로 변환한 다음 템플릿에서 LoginButton 컨트롤을 찾아 CommandName="Login"을 제거하여 컨트롤이 더 이상 내장된 컨트롤을 사용하지 않도록 합니다. 이제 사용자 정보가 있으므로 LoginButton에 OnClick 이벤트를 추가해 보겠습니다.
protected void LoginButton_Click(객체 전송자, EventArgs e)
{
//사용자 이름과 비밀번호가 맞는지 확인
if (Membership.ValidateUser(로그인1.사용자 이름, 로그인1.비밀번호))
{
//위의 로그인 확인 메커니즘 분석에 따라 클라이언트용 COOKIE를 작성합니다.
FormsAuthentication.SetAuthCookie(Login1.UserName, Login1.RememberMeSet);
//성공적으로 확인되면 여기에서 로그인 컨트롤을 숨기는 등의 일부 처리를 수행할 수 있습니다.
Login1.Visible = 거짓;
}
또 다른
{
//내장된 검증 메커니즘을 사용하지 않기 때문에 검증 실패에 대한 처리는 직접 설정해야 합니다.
(Login1.FindControl("FailureText") as Literal).Text = "사용자 이름이나 비밀번호가 올바르지 않습니다. 다시 시도하십시오!";
}
}
위의 코드를 분석하면 Login 컨트롤에서 확인할 사용자 정보는 SQL2005의 Aspnetdb 데이터베이스의 aspnet_membership 테이블에 저장되어 있습니다. 이렇게 하면 Membership.ValidateUser 메서드를 사용하여 쉽게 사용자 정보를 확인할 수 있습니다. 확인이 성공하면 위의 분석을 따르십시오. AttemptLogin 메소드는 클라이언트에 대해 COOKIE를 작성한 다음 확인 실패에 대한 오류 메시지를 설정합니다. 그런 다음 사용자 정보를 성공적으로 확인한 후 로그인 컨트롤을 더 이상 새로 고치지 않도록 쉽게 변환할 수 있습니다. 사용자 정의 컨트롤을 작성할 필요가 없다는 점은 컨트롤이 원래 로그인 컨트롤만큼 복잡하고 효과가 원래 로그인 컨트롤과 정확히 동일하다는 것입니다. CreateUserWizard 컨트롤에 의해 생성된 사용자 이름은 여전히 확인에 사용될 수 있으며 컨트롤도 마찬가지입니다. LoginStatus 및 LoginName과 같은 로그인 컨트롤과 관련된 항목도 평소와 같이 사용할 수 있습니다.
PS: 로그인 컨트롤이 사용자 정보를 확인할 때 PageRequestManagerParserErrorException이 발생하는 경우 web.config에 다음 문장이 포함되어 있는지 확인하세요.
.....
<추가 이름="ScriptModule" type="Microsoft.Web.UI.ScriptModule, Microsoft.Web.Extensions, 버전=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
http://www.cnblogs.com/aspxcn/archive/2006/11/07/552927.html
을 상기시켜 주신 접시에 감사드립니다.