更新面板的异步触发器在太短时间内触发太多时刷新整个页面

时间:2010-04-13 06:13:17

标签: asp.net triggers updatepanel partial-page-refresh asynchronous-postback

我有一个搜索按钮绑定到更新面板作为触发器,如下所示:

<asp:Panel ID="CRM_Search" runat="server">
    <p>Search:&nbsp;<asp:TextBox ID="CRM_Search_Box" CssClass="CRM_Search_Box" runat="server"></asp:TextBox>
    <asp:Button ID="CRM_Search_Button" CssClass="CRM_Search_Button" runat="server" Text="Search" OnClick="SearchLeads" /></p>
</asp:Panel>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="CRM_Search_Button" />
    </Triggers>
    <ContentTemplate> 
     /* Content Here */
    </ContentTemplate>
</asp:UpdatePanel>

在我的javascript中,我使用jQuery抓取搜索框并绑定其键盘以使搜索按钮单击:

    $($(".CRM_Search_Box")[0]).keyup(
        function () {
            $($(".CRM_Search_Button")[0]).click();
        }
    );

除非我开始输入太快,否则这种方式非常有效。一旦我打字太快(我的猜测是否比数据实际返回的速度快)整个页面刷新(做回发?)而不仅仅是更新面板。

我还发现,如果我只是快速点击按钮而不是打字,它就会开始做同样的事情。

有没有办法阻止它这样做?可能会阻止第二次请求,直到第一次请求完成为止?如果我没有走上正轨,那么任何人都有其他想法吗?

谢谢,
马特

1 个答案:

答案 0 :(得分:3)

做这样的事情会更好,并给他一个呼吸:)

我放置一个计时器,所以你在发送点击之前等待250M。我总是这样做,我从不称呼搜索正确的方式,因为当某人输入一个单词时,实际上程序没有理由一直搜索....

这也可以避免您遇到的问题。

var hTimeOut = null;
$($(".CRM_Search_Box")[0]).keyup(
        function () {
            if(hTimeOut)
                clearTimeout(hTimeOut);
            hTimeOut = setTimeout(function() { $($(".CRM_Search_Button")[0]).click(); }, 250);            
        }
);