【问题标题】:UpdatePanel + AutoCompleteExtender + jQuery = Problems!UpdatePanel + AutoCompleteExtender + jQuery = 问题!
【发布时间】:2011-04-11 18:14:56
【问题描述】:

我有一个 ASP.NET Web 表单,它使用 UpdatePanel 来允许部分页面回发。在我的一个 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 有一些更好的选择,但如果有更简单的解决方案可以解决我的问题,我现在不想深入研究。

【问题讨论】:

    标签: jquery asp.net updatepanel autocompleteextender hiddenfield


    【解决方案1】:

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

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

    【讨论】:

    • 这在我设置 ReadOnly = true 时不起作用,但它适用于 Enabled = false。然后我设置:border-style=none;背景颜色:透明以获得正确的样式。最后,为了防止它获得焦点,我将其保持为启用状态(因此它看起来不会变灰),然后将其添加到代码隐藏中:this.txtSelectedProjectName.Attributes.Add("onfocus", "this.blur( );");
    猜你喜欢
    • 2011-07-18
    • 2023-03-21
    • 2010-10-19
    • 2012-11-18
    • 2011-01-17
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多