Обратная передача не покажет изменения до дополнительной обратной передачи? - PullRequest
1 голос
/ 23 ноября 2011

У меня есть рабочая форма входа. Я просто пытался сделать простой тест, чтобы увидеть, работает ли он, и, кажется, он работает только при повторной публикации. Другими словами ...

Я ввожу свое имя пользователя / пароль и нажимаю кнопку входа, он отправляет сообщения назад, но не показывает, что я вошел в систему.

После повторного нажатия на кнопку, перезагрузки и т. Д. Он снова отправит сообщение с желаемым результатом.

// 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(); } }
}

Front End

<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>

Еще раз спасибо!

1 Ответ

4 голосов
/ 24 ноября 2011

Предложить перемещение кода загрузки страницы выше в событие Page_PreRender. Причина в том, что сначала запускается Page Load, затем Button Events, а затем PreRender. Таким образом, загрузка страницы заполняет переменные и подготавливает код для работы, затем происходит событие Button, и страница работает, а затем, когда вся работа выполнена, Pre Render может собирать измененную и неизмененную информацию, необходимую для обновления страницы непосредственно перед ее отправкой на страницу. браузер. Этот поток позволит нажать кнопку входа в систему, произойдет вход в систему, а затем страница вернется в надлежащем формате. Надеюсь, это поможет

...