【问题标题】:How can update usercontrol in masterpage如何更新母版页中的用户控件
【发布时间】:2019-01-26 06:53:36
【问题描述】:

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

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

请有人帮我解决这个问题吗?

这是我的母版页标记:

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

【问题讨论】:

  • "当点击按钮没有任何反应并且用户控件没有更新我应该刷新页面,"你能解释一下吗?
  • @shubham 我的意思是点击标签文本后不会改变,我应该从浏览器手动刷新页面。
  • button_click 处理程序中添加设置占位符可见性(即.Visible="false"; //or true)。

标签: c# asp.net


【解决方案1】:

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

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

【讨论】:

  • 谢谢,这很棒,但现在母版页和网络表单没有更新,只是用户控制内容更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 2013-03-24
  • 2018-08-01
  • 1970-01-01
  • 2021-06-23
  • 1970-01-01
相关资源
最近更新 更多