开发者

ASP:Labels not updating on button Click

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 sele开发者_如何学Goct 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


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"


Your lables are outside of the UpdatePanel.

Under the hood, ASP.Net performes a full postback, but only the part that pertains to your UpdatePanel is transfered back down to the client. Some JavaScript then takes this bit of HTML and replaces the existing <div> element that is your UpdatePanel.

Since your labels are outside of that <div> they never get updates.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜