ASP:标签没有更新按钮单击

时间:2011-09-27 20:21:35

标签: asp.net ajax.net

我知道这可能是如此简单,以至于我无法看到它。我有一个aspx表单,在updata面板中有一个usercontrol。用户控件是人员选择器从公司数据库搜索用户。

我想看到的是:

  1. 用户点击选择用户按钮
  2. 带有人员选择器的更新面板变得可见
  3. 他们搜索用户,然后选择他们想要的用户。
  4. 当他们进行选择并单击完成时,我会获得用户的用户ID并在我们的用户表中查找。
  5. 用户信息应以标签字段的形式显示。
  6. 我可以单步执行代码,看到我正在获取用户信息,并且标签文本正在设置为值,但页面永远不会更新标签。这是一个回发,所以我认为他们会更新。

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

    谢谢,

    朗达

2 个答案:

答案 0 :(得分:7)

由于标签位于更新面板之外,因此只有更新面板内的内容才会从ajax post-back更新,这是更新面板的重点。

您需要在更新面板的内容区域内移动标签,或者为标签设置另一个更新面板,并使其更新模式为“始终”

答案 1 :(得分:0)

你的标签超出了UpdatePanel

在幕后,ASP.Net执行完整的回发,但只有与您的UpdatePanel相关的部分才会转发回客户端。然后,一些JavaScript会使用这一部分HTML并替换现有的<div>元素,即您的UpdatePanel。

由于您的标签不在<div>之内,因此无法获得更新。