1

我有一个 ASP.NET Web 表单,它使用 UpdatePanels 来允许部分页面回发。在我的一个 UpdatePanel 中,我使用 AjaxControlToolkit 中的 AutoCompleteExtender 在我的页面上调用 WebMethod 以异步检索 ProjectNames 列表及其关联的 ProjectID 值。当我从列表中选择一个项目时,我使用 jQuery 将 ProjectID 值保存到 HiddenField 服务器控件。当我单击 UpdatePanel 中的提交按钮以执行数据库查询时,我需要此值。到目前为止,一切都很好。这是相关的客户端代码:

    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:TextBox ID="txtProjectName" Width="200" ToolTip="Type the first few characters of the project to search for" runat="server"></asp:TextBox>
        <ajaxToolkit:AutoCompleteExtender ID="AutoComplete1" TargetControlID="txtProjectName" MinimumPrefixLength="2"
            CompletionInterval="250" CompletionSetCount="20" ServiceMethod="GetProjectCompletionList"
            ServicePath="Default.aspx" runat="server" OnClientItemSelected="itemSelected" />
        <asp:HiddenField ID="hdnProjectID" runat="server" />
        <asp:Label ID="lblProjectName" runat="server"></asp:Label>
        <script type="text/javascript">
            function itemSelected(source, eventArgs) {
                $get('<%= hdnProjectID.ClientID %>').value = eventArgs.get_value();
                $get('<%= lblProjectName.ClientID %>').innerHTML = eventArgs.get_text();
            }
        </script>
        <br /><br />
        <asp:Button ID="btnSubmit" Text="Submit" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>

但是,我还想在 TextBox 之外的某处显示选定的 ProjectName 文本。这样做的原因是我想要一种清晰的方法来直观地区分与 AutoCompleteExtender 返回的列表中的项目匹配的 TextBox 中的值和不匹配任何内容的任何旧的无关文本。因此,我尝试在 Label 控件中显示选定的文本,但是一旦发生回发,该值就会消失。我尝试过使用各种服务器和 HTML 控件,但行为是相同的……除了 ASP.NET HiddenField 控件。我不知道为什么这个控件在回发时保留这些值,而其他控件没有,但我仍然没有完整的解决方案。

我发现,如果我用来显示值的标签在 UpdatePanel 之外,它可以正常工作,但是我的表单当前布局的方式,这不是一个选项。我意识到当您需要更精细地控制在部分页面回发期间要更新的内容时,使用 UpdatePanel 有一些更好的选择,但如果有更简单的解决方案可以解决我的问题,我现在不想深入研究。

4

1 回答 1

1

您的Label控件在部分回发期间被清除,因为它驻留在 中UpdatePanel,因此它被刷新,但没有规定将其“值”(实际上是其内部文本)发布回服务器,因此刷新将其重置。

您需要使用可以将其当前值发布回服务器的 Web 控件。我建议使用TextBox只读模式的控件:它应该适用于大多数浏览器,并且您可以设置它的样式以使其看起来像一个标签。

于 2011-04-11T18:39:52.253 回答