回发不会显示更改,直到有额外的回发

本文关键字:显示 | 更新日期: 2023-09-27 18:15:28

我有一个工作的登录表单。我只是想做一个简单的测试,看看它是否有效,它似乎只工作时张贴回第二次。换句话说,

我输入我的用户名/密码并按下登录按钮,它返回但没有显示我登录了。

再次点击按钮,重新加载等,它将再次发送所需的结果。

// from my pageload
//System.Threading.Thread.Sleep(new TimeSpan(0, 0, 0, 10)); 
//didn't work
if (PageBase.Account.AuthenticatedUser != null) //if user is logged in...
    formLogin.Attributes.Add("Style", "background-color:Green");
else
    formLogin.Attributes.Add("Style", "background-color:Red");
// just changed the background color. 2nd postback it turns green.

谢谢你的帮助和输入。

编辑:需要更多代码

public class AccountManager {
    public Website.User AuthenticatedUser {
        get {
            int id = Convert.ToInt32(( (object)HttpContext.Current.Session["user_id"] ?? 
                                       (object)(HttpContext.Current.Request.Cookies["USER_ID"] ??
                                                new HttpCookie("bugfixcookie") { Value = "0"}).Value));
            var user = (from u in new MyWebsiteEntities().Users where u.ID == id select u).FirstOrDefault();
            return user;
        }
    }
    // create user, 
    public bool Login(string username, string password, bool remember) {
        var result = (from u in new MyWebsiteEntities().Users
        where username == u.Username && password == u.Password select u).FirstOrDefault();
        if (result != null) {
            if (remember) HttpContext.Current.Response.Cookies.Add(new HttpCookie("USER_ID", result.ID.ToString()));
            HttpContext.Current.Session["user_id"] = result.ID.ToString();
            return true;
        } else return false;
    }
    public void Logout() {
        HttpContext.Current.Response.Cookies.Remove("USER_ID");
        HttpContext.Current.Session.Remove("user_id");
    }
}

public class PageBase : System.Web.UI.Page
{
    public static AccountManager Account { get { return new AccountManager(); } }
}
前端

<form runat="server" id="formLogin">
    <asp:TextBox runat="server" ID="textKey" style="display:none" />
    <asp:CheckBox runat="server" ID="checkboxRemember" />
    <div> 
        <span id="un">Username</span><br />
        <asp:TextBox runat="server" ID="textUsername" />
    </div>
    <div> 
        <span id="pw">Password</span><br />
        <asp:TextBox runat="server" ID="textPassword" TextMode="Password" />
    </div>
    <asp:Button runat="server" ID="buttonLogin" OnClick="buttonLogin_click" />
    <asp:Button runat="server" ID="buttonRegister" OnClick="buttonRegister_click" />
</form>

再次感谢!

回发不会显示更改,直到有额外的回发

建议将上面的页面加载代码移动到Page_PreRender Event。原因是页面加载首先运行,然后是按钮事件,然后是PreRender。因此,页面加载填充变量并为工作准备代码,然后按钮事件发生并且页面确实工作,然后当所有工作完成时,prerender可以收集在将页面发送到浏览器之前更新页面所需的更改和未更改的信息。该流程将允许按下登录按钮,进行登录,然后以适当的格式返回页面。希望能有所帮助