UpdatePanel + AutoCompleteExtender + jQuery =问题!

我有一个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文本。原因是我想要一种清晰的方法来在视觉上区分TextBox中与AutoCompleteExtender返回的列表中的项目匹配的值以及任何与任何内容不匹配的旧的无关文本剩余。所以,我尝试在Label控件中显示所选文本,但是一旦发生回发,该值就会消失。我尝试过使用各种服务器和HTML控件,但行为是相同的...除了ASP.NET HiddenField控件。我不确定为什么这个控件在其他人不支持时会在回发中保留这些值,但我仍然没有完整的解决方案。 我发现如果我用来显示值的Label是UpdatePanel的OUTSIDE,它工作正常,但我的表单当前的布局方式,这不是一个选项。我意识到当你需要更细粒度地控制部分页面回发期间要更新的内容时,有一些更好的替代方法可以使用UpdatePanel,但是如果我的问题有一个更简单的解决方案,我宁愿钻研这个。     
已邀请:
您的
Label
控件在部分回发期间被清除,因为它位于
UpdatePanel
中,因此它会被刷新,但是没有规定将其“值”(实际上是其内部文本)发布回服务器,因此刷新会重置它。 您需要使用可以将其当前值发布回服务器的Web控件。我建议在只读模式下使用
TextBox
控件:它应该适用于大多数浏览器,你可以设置它的样式,使其看起来像一个标签。     

要回复问题请先登录注册