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

首頁 > 開發 > 綜合 > 正文

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

2024-07-21 02:28:30
字體:
來源:轉載
供稿:網友

    隨著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事件,代碼如下:

 

protected void loginbutton_click(object sender, eventargs e)
{
        //驗證用戶名及密碼是否正確
        if (membership.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提醒

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 耒阳市| 荔浦县| 保德县| 宁陵县| 柘荣县| 亚东县| 新疆| 武邑县| 岗巴县| 汉中市| 德兴市| 绥江县| 淮南市| 闽清县| 年辖:市辖区| 汶川县| 黄陵县| 临潭县| 贡山| 仙游县| 广德县| 靖宇县| 德令哈市| 巍山| 鄂温| 赤壁市| 宁武县| 郴州市| 井研县| 天镇县| 香港| 水富县| 平远县| 剑河县| 霍林郭勒市| 进贤县| 伊吾县| 宝丰县| 大英县| 九龙坡区| 拜城县|