我在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>
<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> R$</p>
<asp:TextBox ID="txtValor" runat="server"
AutoPostBack="True" MaxLength="12"
onkeypress="javascript:mascara(this, soMoeda);"></asp:TextBox>
<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>
我没有在页面加载上添加任何控件。
答案 0 :(得分:0)
我猜你是在动态地将控件添加到页面中,而且每次都是这样做。如果在将控件添加到页面时更改控件的顺序,则无法找到将事件挂接到的正确控件,因为ID会有所不同。
我真的需要看到你的代码才能正确诊断它。您需要提供更多详细信息。
答案 1 :(得分:0)
这可能不是答案,我只是把它扔出去,但我看到你正在使用附加到文本框的扩展程序控件。就个人而言,我发现MS ajax控件工具包扩展器经常会干扰基本功能,尤其是MaskedEditExtender
。
尝试暂时删除扩展程序,查看问题是否仍然存在。
我将控制扩展程序视为测试版,因为它们太麻烦了。
答案 2 :(得分:0)
您是否在调试器中运行此命令以确保第一次实际调用onclick处理程序?
我见过这样的情况,其中事件处理程序实际上被触发了,但是由于后面的代码中完成的事情的顺序,事件的更改结果直到下一个才会呈现给浏览器提出要求。
因此,下次单击该按钮时,将再次调用相同的事件处理程序,但返回给客户端的内容实际上是在上一次调用中所做的更改。
通常,如果您在page_load中进行数据绑定而不是在实际事件处理程序中重新绑定,则会发生这种情况。我看到很多不同的网格组件,尤其是排序和分页事件。
我们需要看到完整的示例来准确诊断出问题所在。
答案 3 :(得分:0)
您是否查看了生成的HTML以确保它看起来不错?
你是否看过像Fiddler这样的网络调试器的HTTP对话?