ASP:Labels not updating on button Click

Rhonda picture Rhonda · Sep 27, 2011 · Viewed 7.6k times · Source

I know this is probably something so simple that I am just not able to see it. I have an aspx form that has a usercontrol in an updata panel. The user control is a people picker the searches on users from a corporate database.

What I want to see happen is:

  1. The user clicks on a pick user button
  2. The update panel with people picker becomes visible
  3. They search for a user and then select the one they want.
  4. When they make the selection and click Done, I get the user id of the user and look them up in our user table.
  5. The user information should show up in a the form in label fields.

I can step through the code and see that I am getting the user information and that the label text is being set to the values but the page never updates the labels. It is a postback so I would think they would update.

<tr>
        <td colspan="4">
            <asp:UpdatePanel ID="CollapseDelegate" runat="server">
                <ContentTemplate>
                    <asp:Panel ID="pDelegateHeader" runat="server">
                        <div style="padding: 10px 0 10px 20px; height:10px;  text-align: left; background-color:#ffffff; color:#000000; border: 2px solid #ccc;"  >
                            <asp:Label ID="ShowDelegate" runat="server" /><br />
                        </div>
                    </asp:Panel>
                    <asp:Panel ID="pDelegateBody" runat="server">
                        <PP:PeoplePicker ID="PP" runat="server" />
                        <asp:Button ID="btnOk" runat="server" Text="Done" CssClass="Buttons" onclick="btnOk_Click" /> 
                    </asp:Panel>
                    <asp:CollapsiblePanelExtender ID="CollapsiblePanelExtender3" runat="server" TargetControlID="pDelegateBody" CollapseControlID="pDelegateHeader" ExpandControlID="pDelegateHeader" Collapsed="true" TextLabelID="ShowDelegate" CollapsedText="Pick User..." ExpandedText="Close..." CollapsedSize="0"></asp:CollapsiblePanelExtender>
                </ContentTemplate>
            </asp:UpdatePanel>
        </td>
    </tr>
    <tr>
        <td><asp:Label ID="DelegateNameLabel" runat="server" Text="Name:" CssClass="indentedText" /></td>
        <td><asp:Label ID="DelegateNameValueLabel" runat="server" CssClass="indentedText"  Visible="true"></asp:Label></td>
        <td><asp:Label ID="DelegateEmailLabel" runat="server" Text="Email:" CssClass="indentedText" /></td>
        <td><asp:Label ID="DelegateEmailValueLabel" runat="server" CssClass="indentedText" Visible="true"></asp:Label></td>
    </tr>
    <tr>
        <td><asp:Label ID="DelegatePhoneLabel" runat="server" Text="Phone:" CssClass="indentedText" /></td>
        <td><asp:Label ID="DelegatePhoneValueLabel" runat="server" CssClass="indentedText" Visible="true"></asp:Label></td>
        <td><asp:Label ID="DelegateVerifiedLabel" runat="server" Text="Last Verified Date:" CssClass="indentedText" /></td>
        <td><asp:Label ID="DelegateVerifiedValueLabel" runat="server" CssClass="indentedText" /></td>
    </tr>



protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            string PassedDelegateID = string.Empty;
            string Mode = string.Empty;
            int delegateId = 0;

            if (Request.QueryString["Id"] != null)
            {
                PassedDelegateID = Request.QueryString["Id"].ToString();
            }
            else
            {
                PassedDelegateID = "0";
            }

            if (Request.QueryString["mode"] != null)
            {
                Mode = Request.QueryString["mode"].ToString();
            }
            else
            {
                Mode = "add";
            }

            if (Mode == "add")
            {
                pnlUdpateDelegateText.Text = UIConstants.ADDDELEGATETEXT.ToString();
            }
            else
            {
                pnlUdpateDelegateText.Text = UIConstants.UPDATEDELEGATETEXT.ToString();
                if (int.TryParse(PassedDelegateID, out delegateId))
                {
                    loadDelegateData(delegateId);
                }
            }
        }
    }

    protected void btnOk_Click(object sender, EventArgs e)
    {
        TextBox txtSearchValue = (TextBox)PP.FindControl("txtSearchResults");
        string LanId = txtSearchValue.Text;

        User user = BusinessUtility.GetUser(LanId);

        DelegateNameValueLabel.Text = user.Name;
        DelegateEmailValueLabel.Text = user.Email;
        DelegatePhoneValueLabel.Text = user.Phone;
        DelegateVerifiedValueLabel.Text = DateTime.Now.ToShortDateString();


    }

Thanks,

Rhonda

Answer

hollystyles picture hollystyles · Sep 27, 2011

Because the labels are outside the update panel, only the content inside the update panel is updated from an ajax post-back, that's the whole point of an update panel.

You will need to either move the labels inside the update panel's content area, or have another update panel for the labels and make it's update mode "always"