如何更新母版页中的用户控件



我有一个母版页和一个用户控件。

我在用户控件

中有两个用于创建或删除会话的按钮,以及一个显示会话文本的标签,当单击按钮时没有任何反应,用户控件不会更新,我应该刷新页面,

你能请任何人帮我解决这个问题吗?

这是我的母版页标记:

<form runat="server">
   <div>
       <!--previous codes-->
       <nav class="navigation">
           <div class="wrapper"> 
               <controller:menu runat="server" ID="menu" />
               <controller:user runat="server" ID="user" />
           </div>
       </nav> 
       <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
       </asp:ContentPlaceHolder>
       <!--Next Codes-->
    </div>
</form>

这是我的用户控件

<ul class="nav signup">
    <li class="no-drop-down">
        <asp:Label ID="_signupbutton" runat="server" CssClass="sr">Test</asp:Label>
            <div class="signup-dropdown">
                <asp:PlaceHolder ID="_defaultuser" runat="server" Visible="false">
                <div class="notloggeduser">
                    <asp:LinkButton ID="LinkButton1" runat="server" CssClass="usercontroller" 
                         OnClick="LinkButton1_Click" Text="????">
                    </asp:LinkButton>
                </div>
           </asp:PlaceHolder>
           <asp:PlaceHolder ID="_signedup" runat="server" Visible="false">
               <div class="defaultuser">
                   <ul>
                       <li>
                            <asp:LinkButton ID="_userlogout" runat="server"  CssClass="usercontroller" OnClick="_userlogout_Click">
                                <i class="fa"></i>????
                            </asp:LinkButton>
                       </li>
                   </ul>
               </div>
            </asp:PlaceHolder>
        </div>
    </li>
</ul>

这是用户控件代码隐藏

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
         if (Session["signup"] == null)
         {
              _signupbutton.Text = "??? ??? / ????";
              _defaultuser.Visible = true;
         }
         else
         {
             _signupbutton.Text = "<i class="fa"></i> " + Session["signup"].ToString();
             _signedup.Visible = true;
         }
    }
}
protected void _userlogout_Click(object sender, EventArgs e)
{
    Session.Remove("signup");
}
protected void LinkButton1_Click(object sender, EventArgs e)
{
    Session.Add("signup", "????? ??????????");
}

你的事件顺序在这里有点混乱。

Page_Load将在单击事件的事件处理程序之前执行。您需要从事件处理程序执行按钮状态的设置,就像在页面加载中执行此操作一样,您的会话对象尚未更新。

您需要在此处执行一些操作(这未经过测试,但应显示逻辑):

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack) // This will run when the page is loaded but not from a post back / button click etc (e.g. from your page refresh)
    {
      this.SetButtonState();
    }
    else
    {
      // use this for things you want to happen on postback only
    }
}
private void SetButtonState()
{
   if (Session["signup"] == null)
   {
      _signupbutton.Text = "??? ??? / ????";
      _defaultuser.Visible = true;
   }
   else
   {
      _signupbutton.Text = "<i class="fa"></i> " + Session["signup"].ToString();
      _signedup.Visible = true;
   }
}
protected void _userlogout_Click(object sender, EventArgs e)
{
    Session.Remove("signup");
    // Update your button state
    this.SetButtonState();
}
protected void LinkButton1_Click(object sender, EventArgs e)
{
    Session.Add("signup", "????? ??????????");
    // Update your button state
    this.SetButtonState();
}

最新更新