国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Login控件在UpdatePanel內當驗證用戶信息成功后出現頁面刷新的解決辦法

2019-11-18 16:53:29
字體:
來源:轉載
供稿:網友

    隨著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控件,并將其轉換成

 

protected void LoginButton_Click(object sender, EventArgs e)
{
        //驗證用戶名及密碼是否正確
        if (Membersh
ip.ValidateUser(Login1.UserName, Login1.PassWord))
        {
            //根據上面分析Login的驗證機制,為客戶端寫上COOKIE.
            FormsAuthentication.SetAuthCookie(Login1.UserName, Login1.RememberMeSet);
           //驗證成功后可在此作一些處理,如把Login控件隱藏起來
            Login1.Visible = false;          
        }
        else
        {
            //由于不使用內置的驗證機制,那么驗證失敗的處理要自己設置一下.
            (Login1.FindControl("FailureText") as Literal).Text = "用戶名或密碼不正確,請重試!";
        }
}

    分析上面代碼,其中因為Login控件要驗證的用戶信息都儲存在SQL2005的Aspnetdb數據庫的aspnet_membership表,這樣我們只要使用Membership.ValidateUser這個方法就能輕松實現驗證用戶信息,當驗證成功后,按照上面分析的AttemptLogin方法為客戶端寫上COOKIE,再設置一下驗證失敗的出錯信息之后就輕松的把我們的Login控件改造為成功驗證用戶信息之后不再刷新了,這樣改造后的好處是不用像編寫自定義控件那樣復雜,并且效果和原來的Login控件是一模一樣的,也照樣能使用CreateUserWizard控件創建的用戶名進行驗證,而LoginStatus、LoginName等Login控件相關的控件也能如常使用。

PS:如果Login控件驗證用戶信息時出現PageRequestManagerParserErrorException錯誤,請檢查web.config是否有這句:
<httpModules>
.....
<add name="ScriptModule" type="Microsoft.Web.UI.ScriptModule, Microsoft.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</httpModules>

感謝saucer提醒

http://m.survivalescaperooms.com/aspxcn/archive/2006/11/07/552927.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 韶关市| 股票| 长武县| 梁河县| 唐海县| 铁力市| 陇西县| 福州市| 天柱县| 石家庄市| 常熟市| 丰原市| 颍上县| 广宁县| 白沙| 镇雄县| 新乐市| 沁源县| 奈曼旗| 普洱| 宝丰县| 滨州市| 大城县| 庄浪县| 孟州市| 清河县| 玉林市| 山阴县| 青州市| 黎平县| 铜川市| 交口县| 容城县| 西贡区| 大厂| 札达县| 济南市| 东丽区| 无棣县| 蓝山县| 巴里|