2012-01-31 2 views
1

Я думаю, что мой вопрос вращается вокруг меня, не имея удобного понимания жизненного цикла страницы в ASP.net, к сожалению. Я читал много, но его много, чтобы взять, извините! в любом случае им пытаются сделать супер простую страницу как доказательство концепции, что я буду делать через весь сайт, чтобы сначала я только после того, что у меня есть:простая страница входа и динамическое скрытие элементов управления на основе переменной сеанса

ASPX:

<asp:Button ID="btnLogin" runat="server" Text="Login" 
onclick="btnLogin_Click" /> 

<hr /> 

<asp:Label ID="Label1" runat="server" Text="Regular User"></asp:Label> 
<asp:TextBox ID="TextBox1" runat="server">Regular User</asp:TextBox> 
<asp:Button ID="Button1" runat="server" Text="Regular User" /> 

<hr /> 

<asp:Label ID="Label2" runat="server" Text="Admin"></asp:Label> 
<asp:TextBox ID="TextBox2" runat="server">Admin</asp:TextBox> 
<asp:Button ID="Button2" runat="server" Text="Admin" /> 

ASPX.CS:

protected void Page_Load(object sender, EventArgs e) 
    { 

     String admin = (String)(Session["admin"]) ?? ""; 

     if (!admin.Equals("true")) 
     { 
      Label2.Visible = false; 
      TextBox2.Visible = false; 
      Button2.Visible = false; 
     } 

    } 

    protected void btnLogin_Click(object sender, EventArgs e) 
    { 
     Session["admin"] = "true"; 
    } 

Поэтому я хочу, чтобы все случайные элементы управления скрывались после того, как пользователь «становится администратором», иначе переменная переменной сеанса. Моя проблема в том, что элементы управления не скроют себя напрямую после нажатия кнопки. Я должен освежиться или уйти и вернуться. Рассматривая проблемы жизненного цикла страницы, прежде чем я думаю, что это то, что испортило, возможно, мне просто нужно отключить видимость в функции, отличной от Page_Load? В любом случае, может быть 100% лучший и простой способ сделать это в целом, и я открыт для этого, просто знаю, спасибо - спасибо!

ответ

3

Button.Нагрузчики-манипуляторы появляются после загрузки страницы. Это означает, что при нажатии кнопки вам необходимо установить состояния своих элементов управления после того, как вы установите переменную сеанса, чтобы изменения отображались в рендеринге первой страницы после нажатия кнопки.

Кроме того, ViewState сохранит свойства, которые вы установили на элементах управления, поэтому вам нужно проверить состояние входа и выхода из системы и установить правильное состояние в обоих направлениях.

Код:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     Session["admin"] = null; 
    } 
    Set_Control_State(); 
} 

protected void btnLogin_Click(object sender, EventArgs e) 
{ 
    String admin = (String)(Session["admin"]) ?? ""; 
    if (admin.Equals("true")) 
    { 
     Session["admin"] = null; 
    } 
    else 
    { 
     Session["admin"] = "true"; 
    } 
    Set_Control_State(); 
} 

protected void Set_Control_State() 
{ 
    String admin = (String)(Session["admin"]) ?? ""; 

    if (admin.Equals("true")) 
    { 
     btnLogin.Text = "Log Out"; 
     Label2.Visible = true; 
     TextBox2.Visible = true; 
     Button2.Visible = true; 
    } 
    else 
    { 
     btnLogin.Text = "Log In"; 
     Label2.Visible = false; 
     TextBox2.Visible = false; 
     Button2.Visible = false; 
    } 
} 
+0

этот ответ, кажется, имеет смысл по какой-то причине я все еще имеющего перемещаться в сторону и вернуться к странице изменения на самом деле появляются только. любые идеи почему? – chilleo

+0

@chilleo Поскольку ваше состояние по умолчанию вышло из системы, и когда вы входите в систему, у вас не было никакого кода, чтобы установить видимость на true. См. Мое обновление. – pseudocoder

+0

WOW! Сегодня я полностью извиняюсь. красивый ответ, и это имеет смысл, спасибо вам очень много! дело закрыто – chilleo

0

Ваш клик появится после страницы Page_Load - что, очевидно, вы знаете.

Вы можете скрываться после нажатия кнопки, элементы управления будут помнить о своем состоянии.

Label2.Visible = false; 
TextBox2.Visible = false; 
Button2.Visible = false; 

 Смежные вопросы

  • Нет связанных вопросов^_^