ASP.NET页面事件 - 必须单击两次按钮才能触发事件

时间:2009-12-09 17:54:11

标签: c# asp.net

我在UpdatePanel中有一个带有一些控件(2个下拉列表,3个文本框)的imageButton。

当我更改任何文本框的文本时,需要单击ImageButton两次以触发onClick事件。

我只是不知道为什么会发生这种情况,因为我有任何与文本框相关的事件。

有什么想法吗?

谢谢!

好的,只需编辑即可显示我的代码。

这是UpdatePanel,其中包括:

<asp:UpdatePanel ID="upBusca" runat="server"><ContentTemplate>
<asp:UpdateProgress ID="pMaster" runat="server"><ProgressTemplate><div id="loaderOverlay"></div><div id="loader"><img alt="Carregando..." src='<%# "/imagens/" + ThemeName + "/loading.gif" %>' /><p>Carregando...</p></div></ProgressTemplate></asp:UpdateProgress>
<div style="float:left" id="busca">
<img src='<%# "/imagens/" + ThemeName + "/busca-fundo-e.jpg" %>' class="esquerda" alt=""/>
<img src='<%# "/imagens/" + ThemeName + "/busca-fundo-d.jpg" %>' class="direita" alt=""/> 
<p class="titulo">Utilize os campos abaixo para filtrar as operações registradas.</p>    
<div style="float:left">
<p><b>Status:</b></p>
<asp:DropDownList ID="ddlStatus" runat="server">
    <asp:ListItem Selected="True" Value="T">Todos os títulos</asp:ListItem>
    <asp:ListItem Value="3">Título liberado para antecipação</asp:ListItem>
    <asp:ListItem Value="4">Antecipação solicitada</asp:ListItem>
    <asp:ListItem Value="2">Título pago</asp:ListItem>
    <asp:ListItem Value="5">Título não liberado para antecipação</asp:ListItem>
</asp:DropDownList><br />
<p><b>Data:</b></p>
    <asp:DropDownList ID="ddlData" runat="server" AutoPostBack="True" 
        onselectedindexchanged="ddlData_SelectedIndexChanged">
        <asp:ListItem Selected="True">-- Selecione --</asp:ListItem>
        <asp:ListItem Value="dataEmissao">Emissão</asp:ListItem>
        <asp:ListItem Value="solicitacao">Solicitação</asp:ListItem>
        <asp:ListItem Value="vencimento">Vencimento</asp:ListItem>
        <asp:ListItem Value="pagamento">Pagamento</asp:ListItem>
    </asp:DropDownList>
    &nbsp;&nbsp;<asp:TextBox ID="txtDtInicial" runat="server" AutoPostBack="True" 
        Visible="False"></asp:TextBox>
    <asp:Label ID="lblA" runat="server" Text="à" Visible="False"></asp:Label>
    <asp:TextBox ID="txtDtFinal" runat="server" AutoPostBack="True" Visible="False"></asp:TextBox>
    <br />
<p><b>Nº Solicitação:</b></p>
<asp:TextBox ID="txtSolicitacao" runat="server" AutoPostBack="True" ></asp:TextBox>
    <br />
<p><b>Valor:</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R$</p>
 <asp:TextBox ID="txtValor" runat="server"
    AutoPostBack="True" MaxLength="12" 
        onkeypress="javascript:mascara(this, soMoeda);"></asp:TextBox>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

<cc1:MaskedEditExtender ID="meDataD" runat="server" TargetControlID="txtDtInicial" 
        ClearMaskOnLostFocus="False" Mask="99/99/9999">
</cc1:MaskedEditExtender>
<cc1:MaskedEditExtender ID="meDataAte" runat="server" TargetControlID="txtDtFinal" 
        ClearMaskOnLostFocus="False" Mask="99/99/9999">
</cc1:MaskedEditExtender>
    <asp:ImageButton ID="imbBuscar" runat="server" 
        ImageUrl="~/imagens/Default/bt-busca.jpg" onclick="imbBuscar_Click" />
<br />     
</div>
<div style="float:left">    
<p><b>Número NF:</b></p>
<asp:TextBox ID="txtNf" runat="server" AutoPostBack="True" ></asp:TextBox>
    <br />     
</div>
</div><!-- Busca -->    
<hr />
</ContentTemplate>
</asp:UpdatePanel>

我没有在页面加载上添加任何控件。

4 个答案:

答案 0 :(得分:0)

我猜你是在动态地将控件添加到页面中,而且每次都是这样做。如果在将控件添加到页面时更改控件的顺序,则无法找到将事件挂接到的正确控件,因为ID会有所不同。

我真的需要看到你的代码才能正确诊断它。您需要提供更多详细信息。

答案 1 :(得分:0)

这可能不是答案,我只是把它扔出去,但我看到你正在使用附加到文本框的扩展程序控件。就个人而言,我发现MS ajax控件工具包扩展器经常会干扰基本功能,尤其是MaskedEditExtender

尝试暂时删除扩展程序,查看问题是否仍然存在。

我将控制扩展程序视为测试版,因为它们太麻烦了。

答案 2 :(得分:0)

您是否在调试器中运行此命令以确保第一次实际调用onclick处理程序?

我见过这样的情况,其中事件处理程序实际上被触发了,但是由于后面的代码中完成的事情的顺序,事件的更改结果直到下一个才会呈现给浏览器提出要求。

因此,下次单击该按钮时,将再次调用相同的事件处理程序,但返回给客户端的内容实际上是在上一次调用中所做的更改。

通常,如果您在page_load中进行数据绑定而不是在实际事件处理程序中重新绑定,则会发生这种情况。我看到很多不同的网格组件,尤其是排序和分页事件。

我们需要看到完整的示例来准确诊断出问题所在。

答案 3 :(得分:0)

您是否查看了生成的HTML以确保它看起来不错?

你是否看过像Fiddler这样的网络调试器的HTTP对话?

相关问题