Com o lançamento do AJAX.NET BETA 2 hoje, vimos o quão rápida e eficiente é a integração estreita do AJAX e do ASP.NET 2.0. Podemos até tornar as páginas da web ASP.NET mais eficientes sem escrever um único código JS. efeito gratuito alcançado com horas de código JS escrito. É tão fácil integrar tudo isso no ASP.NET. Basta mover o controle para o controle UPDATEPANEL e definir alguns parâmetros. No entanto, ao experimentar a conveniência que o AJAX.NET traz aos desenvolvedores, você também descobrirá que o AJAX.NET às vezes não é perfeito. Assim como o autor encontrou recentemente um bug no controle de login do ASP.NET 2.0 que atualiza a página após verificar com êxito as informações do usuário no UPDATEPANEL. Obviamente, isso viola o princípio de não atualização do AJAX. método de verificação de informações de identidade encontrou o seguinte código:
private void AttemptLogin()
{
LoginCancelEventArgs args1 = new LoginCancelEventArgs();
this.OnLoggingIn(args1);
se (!args1.Cancel)
{
AuthenticateEventArgs args2 = new AuthenticateEventArgs();
this.OnAuthenticate(args2);
se (args2.Autenticado)
{
//Depois que as informações do usuário forem verificadas com sucesso, escreva as informações do COOKIE para o cliente.
FormsAuthentication.SetAuthCookie(this.UserNameInternal, this.RememberMeSet);
this.OnLoggedIn(EventArgs.Empty);
//É a seguinte instrução de resposta que causa problemas. Executar uma operação de redirecionamento no controle UPDATEPANEL faz com que a página seja atualizada!
this.Page.Response.Redirect(this.GetRedirectUrl(), false);
}
}
}
Analisando o método AttemptLogin, não é difícil ver que quando pressionamos o botão de login do controle Login e verificamos com sucesso as informações do usuário, uma instrução de redirecionamento de página Response.Redirect será executada (este código será executado mesmo que o redirecionamento page não é especificada e o padrão é a página atual), e é justamente por causa do redirecionamento da página que a página é atualizada. Depois de saber a causa do erro, será mais fácil lidar com isso. Talvez alguém diga que o controle personalizado pode herdar o controle Login e substituir o método AttemptLogin. A resposta é sim. Como é o mecanismo de verificação integrado que faz com que a página seja atualizada, simplesmente não use o processamento de verificação do controle Login, mas use um método personalizado para lidar com a verificação da identidade do usuário. Primeiro, para usar um método de verificação personalizado, primeiro encontramos o controle Login e o convertemos em um modelo. Em seguida, encontramos o controle LoginButton no modelo e removemos CommandName="Login" para que o controle não use mais o controle integrado. no método para verificação. Agora que temos as informações do usuário, vamos adicionar um evento OnClick ao LoginButton.
protegido void LoginButton_Click(objeto remetente, EventArgs e)
{
//Verifica se o nome de usuário e a senha estão corretos
if (Membership.ValidateUser(Login1.UserName, Login1.Password))
{
//De acordo com a análise acima do mecanismo de verificação de Login, escreva COOKIE para o cliente.
FormsAuthentication.SetAuthCookie(Login1.UserName, Login1.RememberMeSet);
//Após a verificação bem-sucedida, você pode fazer algum processamento aqui, como ocultar o controle Login.
Login1.Visível = falso;
}
outro
{
//Como o mecanismo de verificação integrado não é usado, o tratamento da falha de verificação precisa ser configurado por você mesmo.
(Login1.FindControl("FailureText") as Literal).Text = "O nome de usuário ou senha está incorreto, tente novamente!";
}
}
Analise o código acima. As informações do usuário a serem verificadas pelo controle Login são armazenadas na tabela aspnet_membership do banco de dados Aspnetdb do SQL2005. Dessa forma, podemos verificar facilmente as informações do usuário usando o método Membership.ValidateUser. a verificação foi bem-sucedida, siga a análise acima. O método AttemptLogin grava COOKIE para o cliente e, em seguida, define a mensagem de erro para falha na verificação. Então, podemos facilmente transformar nosso controle de Login para não ser mais atualizado após a verificação bem-sucedida das informações do usuário. é que não há necessidade de escrever personalizado O controle é tão complexo quanto o controle Login original e o efeito é exatamente o mesmo que o controle Login original. O nome de usuário criado pelo controle CreateUserWizard ainda pode ser usado para verificação e controles. relacionados ao controle Login, como LoginStatus e LoginName também podem ser usados normalmente.
PS: Se ocorrer uma PageRequestManagerParserErrorException quando o controle Login verificar as informações do usuário, verifique se web.config contém esta frase:
<httpMódulos>
.....
<add name="ScriptModule" type="Microsoft.Web.UI.ScriptModule, Microsoft.Web.Extensions, Versão=1.0.61025.0, Culture=neutro, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>
Obrigado, pires, por lembrar
http://www.cnblogs.com/aspxcn/archive/2006/11/07/552927.html