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

时间:2019-01-26 06:53:36

标签: c# asp.net

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

我在用户控件中有两个用于创建或删除会话的按钮,以及一个显示会话文本的标签,当单击这些按钮时,什么也没有发生,并且用户控件没有更新,我应该刷新页面,

您能否请任何人帮我解决此问题?

这是我的母版页标记:

<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", "????? ??????????");
}

1 个答案:

答案 0 :(得分:0)

您的事件顺序在这里有些混乱。

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

您将需要在此处做一些事情(未经测试,但应该向您展示逻辑):

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