Login控件在UpdatePanel内当验证用户信息成功后出现页面刷新的解决办法
2007-06-19 16:59
671 查看
随着AJAX.NET BETA 2在今天发布,让我们看到了AJAX与ASP.NET2.0紧密结合的快捷与高效,我们甚至可以无需写一句JS代码即可让ASP.NET的网页得到以往要花上数小时编写的JS代码所实现的无刷新效果。而将这一切结合到ASP.NET也是那么的容易,只需将控件简单地移到UPDATEPANEL控件之内再设置几个参数即可实现。但是,在体验AJAX.NET带给开发者便利的同时,也会发现AJAX.NET有时也并不是十全十美。就像笔者近日遇到ASP.NET2.0的Login控件在UPDATEPANEL内当成功验证用户信息后会刷新页面的BUG,很显然这是违背了AJAX无刷新的原则了,之后经过分析Login控件内置的用户身份信息验证的方法发现如下代码:
private void AttemptLogin()
{
LoginCancelEventArgs args1 = new LoginCancelEventArgs();
this.OnLoggingIn(args1);
if (!args1.Cancel)
{
AuthenticateEventArgs args2 = new AuthenticateEventArgs();
this.OnAuthenticate(args2);
if (args2.Authenticated)
{
//用户信息验证成功后,为客户端写上COOKIE信息.
FormsAuthentication.SetAuthCookie(this.UserNameInternal, this.RememberMeSet);
this.OnLoggedIn(EventArgs.Empty);
//就是下面这句Response语句作怪,在UPDATEPANEL控件内执行转向操作导致页面刷新!
this.Page.Response.Redirect(this.GetRedirectUrl(), false);
}
}
}
通过分析AttemptLogin方法不难看出,当我们按下Login控件的登录Button并成功验证用户信息之后会执行一句Response.Redirect页面转向语句(即使没有指定转向页也会执行这句代码,默认为当前页),而正是因为执行了页面的转向而导致了页面的刷新。当知道出错的原因之后就好办了,可能这时会有人说自定义控件继承Login控件并重写AttemptLogin方法就可以了,但除了自定义控件之外还有没有更简单的方法呢?答案是肯定的,既然是内置的验证机制造成页面的刷新,那么就索性不使用Login控件的验证处理,而使用自定义一个方法去处理验证用户身份。首先为了使用自定义的验证方法,我们先找到Login控件,并将其转换成模板,然后在模板内找到LoginButton这个控件,将CommandName="Login" 去掉,这样控件就不再使用内置的方法去验证用户信息了,跟着我们为LoginButton加上一个OnClick事件,代码如下:
查看原文
private void AttemptLogin()
{
LoginCancelEventArgs args1 = new LoginCancelEventArgs();
this.OnLoggingIn(args1);
if (!args1.Cancel)
{
AuthenticateEventArgs args2 = new AuthenticateEventArgs();
this.OnAuthenticate(args2);
if (args2.Authenticated)
{
//用户信息验证成功后,为客户端写上COOKIE信息.
FormsAuthentication.SetAuthCookie(this.UserNameInternal, this.RememberMeSet);
this.OnLoggedIn(EventArgs.Empty);
//就是下面这句Response语句作怪,在UPDATEPANEL控件内执行转向操作导致页面刷新!
this.Page.Response.Redirect(this.GetRedirectUrl(), false);
}
}
}
通过分析AttemptLogin方法不难看出,当我们按下Login控件的登录Button并成功验证用户信息之后会执行一句Response.Redirect页面转向语句(即使没有指定转向页也会执行这句代码,默认为当前页),而正是因为执行了页面的转向而导致了页面的刷新。当知道出错的原因之后就好办了,可能这时会有人说自定义控件继承Login控件并重写AttemptLogin方法就可以了,但除了自定义控件之外还有没有更简单的方法呢?答案是肯定的,既然是内置的验证机制造成页面的刷新,那么就索性不使用Login控件的验证处理,而使用自定义一个方法去处理验证用户身份。首先为了使用自定义的验证方法,我们先找到Login控件,并将其转换成模板,然后在模板内找到LoginButton这个控件,将CommandName="Login" 去掉,这样控件就不再使用内置的方法去验证用户信息了,跟着我们为LoginButton加上一个OnClick事件,代码如下:
查看原文
相关文章推荐
- Login控件在UpdatePanel内当验证用户信息成功后出现页面刷新的解决办法
- Login控件在UpdatePanel内当验证用户信息成功后出现页面刷新的解决办法
- 同一个ASP.NET页面放置多个UpdatePanel分别刷新的解决办法。.
- 同一个ASP.NET页面放置多个UpdatePanel分别刷新的解决办法。.
- 使用UpdatePanel在后台执行javascript不成功解决办法
- 解决MyEclipse联网编辑JSP页面出现类、方法等提示信息的时候出现死机、假死等问题的办法
- 向aspx的html代码页面拖拽自定义服务器控件出现“无效的Formatetc结构(异常来自HRESULT......)"错误解决办法
- usercontrol(用户控件)的引用以及出现未将对象引用设置到对象的实例的解决办法
- ASP.Net中基于UpdatePanel的无刷新上传(用户控件)(C#)
- Updatepanel用了为什么还刷新页面解决方法
- 在页面中使用updatePanel和freeTextBox时,当页面刷子新后,ftb不能输入内容的解决办法
- updatepanel 与 fileupload控件不能一起用?获取不到值(解决办法)
- 页面部分有些easyui验证控件没有小图标的解决办法
- updatepanel中的模板页中的控件 进行全局刷新的解决方法(respone.write()出错的解决方法,updatepanel中导出excel的解决方 案) (转自freeliver54博客)
- saucer(思归)解决的关于:页面A.aspx 动态载入用户自定义控件a.ascx,但a.ascx中的按钮提交后,不执行按钮的事件,而是直接刷新页面
- 解决MyEclipse6.5联网编辑JSP页面出现提示信息的时候的死机、假死等问题的办法
- C#中关于updatePanel与freeTextBox不兼容的问题 当页面刷子新后,ftb不能输入内容的解决办法
- JSP页面多次提交时(后台对表单有校验功能 )提示信息重复出现解决办法
- 使用验证控件出现错误:要“jquery”ScriptResourceMapping。请添加一个名为 jquery (区分大小写)的 ScriptResourceMapping。”的解决办法。
- Gridview Row事件响应方法无法获取其它UpdatePanel中控件数据的解决办法