asp:ImageButton未触发onclick事件

10

我有一个使用了母版页、多个RequiredFieldValidators和Web Toolkit自动完成扩展程序的页面。以下代码仅显示页面的最少内容:

<%@ Page Language="C#" 
    AutoEventWireup="true"  
    CodeFile="Login.aspx.cs" 
    MasterPageFile="~/master.master" 
    Inherits="Login" %>

<asp:Content id="Content1" 
    contentplaceholderid="ContentPlaceHolder1" 
    runat="server">
    <asp:UpdatePanel ID="pnlUpdate" runat="server">
        <ContentTemplate>
            <div>
                <asp:ImageButton class="submitButton" 
                    imageurl="images/button_submit.gif" 
                    id="btnSubmit" 
                    runat="server" 
                    onclick="btnSubmit_ServerClick"/>
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>

后台代码:

protected void btnSubmit_ServerClick
      (object sender, ImageClickEventArgs e)
{
    //breakpoint here does not get hit
}

<form runat="server">标签位于母版页中。上述代码不触发 onclick 事件。如果我去掉母版页并在页面中添加一个 form 标签,它就可以工作了。是母版页中的 form 标签不受支持,还是它应该以某种方式工作?alt text http://digitalcopy.warnerbros.com/images/mainmenu.gif?provider=00079&disc=03403AAA-1D20-47F2-91FA-5EE632832659


对我有效的唯一答案来自另一个问题。 :) http://stackoverflow.com/a/15911261/1603799 - MiniRagnarok
16个回答

0

我曾经遇到同样的问题,我动态创建了一个ImageButton,但是点击事件没有触发。因此,我在 if (IsPostBack) 中创建了这个ImageButton。现在它可以正常工作了。即使页面刷新,ImageButton也会被保留。


0

在尝试了以上所有建议都无法解决我的问题后,我在OnInit()中再次尝试调用按钮的创建。这解决了我的问题,现在OnClick事件可以正常触发。


0

请确保使用OnClick而不是onClick

您的更新面板可能会干扰回发。尝试在没有UpdatePanel的情况下进行操作,看看是否是罪魁祸首。


0
从您提供的代码来看,您的页面似乎缺少<asp:scriptmanager>。 您必须执行以下操作之一:
  1. 在页面上使用<asp:scriptmanagerproxy>和主页上的<asp:scriptmanager>
  2. 在您的页面上使用<asp:scriptmanager>,并且主页上没有<asp:scriptmanager>

个人建议在主页上使用<form>标签,但这只是个人偏好。


很好的观点。但添加ScriptManagerProxy并没有帮助。我把表单放回到主页面上,保持脚本管理器在内容页面上,但仍然不起作用。只有当表单和脚本管理器标签都在内容页面上时才有效。很奇怪。 - cdonner

0

您可以尝试去掉UpdatePanel,看看它是否起作用。我通常是先不使用UpdatePanel开始工作,让所有东西都按照我想要的方式工作,然后再添加UpdatePanel,并调试任何引起问题的地方。

MasterPage中的表单对我有用,因此@Keltex提到的ScriptManager/ScriptManagerProxy可能是个问题,虽然有时我会忘记它们,但通常还能过关。

使用UpdatePanel时,按钮的单击事件将通过Javascript处理,因此您可以获取FireBug或类似工具(根据浏览器而定),并跟踪实际发生的事情。它是否在验证时出错并且您没有看到它?是否有JS错误(Control Toolkit并不总是完美的)?页面实际上是否正在提交,只是没有触发事件处理程序?


我仔细检查了JS代码,并观察到事件被处理了,没有出现任何异常。为什么它没有发送到服务器对我来说并不明显。为了理解这个问题,我需要深入研究生成的客户端代码。 移除UpdatePanel并没有改变行为。 - cdonner
如果将普通按钮替换为图像按钮会发生什么?它能正常工作吗?在所有浏览器中是否都表现相同? - Jared
仔细阅读您的评论后,听起来像是验证器/JS问题,因为它没有返回到服务器。您是否有其他控件(如Control Toolkit控件)可能会干扰图像按钮? - Jared

0

我认为这可能与您在创建和分配事件处理程序后重新分配id有关?

您是否真的需要分配id? - 当然,这会自动完成吗? - 如果是这样,那么删除“ib.ID = i +“:”+ j;”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接