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 事件。如果我摆脱母版页并向页面添加表单标签,它就可以工作。是否不支持母版页中的表单标签,或者这应该以某种方式工作? 替代文字 http://digitalcopy.warnerbros.com/images/mainmenu.gif?provider=00079&disc=03403AAA-1D20-47F2-91FA-5EE632832659

4

16 回答 16

12

您还可以检查您的 ImageButton 是否不会触发验证。如果它确实将其 CausesValidation 属性设置为 false(当然,如果它有意义的话)。

于 2009-04-25T05:52:57.053 回答
4

我的解决方案是将 ImageButton 的 CausesValidation 设置为 false。

于 2013-04-09T21:03:13.590 回答
4

我有一个类似的问题(不同的场景)。我使用Page.RegisterRequiresRaiseEvent(ImageButton)并且我的 onclick 事件开始触发。为什么我需要这样做?我不知道。

于 2009-08-25T22:56:07.080 回答
2

ib.ID = i + ":" + j;

应该改为

ib.ID = i.toString()+":"+j.toString();

如果它仍然不起作用,请尝试使用 StringBuilder 来构建 ID 并稍后将其分配给 ib.ID 属性

于 2011-03-07T18:22:04.510 回答
2

我对图像按钮有类似的问题,并找到了根本原因。您正在使用

" ib.ID = i + ":" + j;"

作为 的 ID ImageButton,“ :”是非法名称,因为您正在以编程方式创建它,ASP.NET 允许创建它。

在运行时,如果您查看页面的 HTML 源代码,您将看到特殊字符被忽略或替换为“ _”。因此页面无法找到正确的控件,因此事件不会触发。尝试用纯文本更改名称,该事件将触发。

于 2009-09-16T21:41:04.287 回答
1

这是对我有用的解决方案

如果您通过数据绑定控件进行绑定,则使用 OnCommand attr 而不是 OnClick attr

于 2016-08-22T10:31:04.323 回答
0

在我的网页上,我在更新面板包含的表内动态创建图像按钮。按钮由以下代码创建:

for (int i = 0; i < 15; i++)
    {
        TableRow tr = new TableRow();
        for (int j = 0; j < 20; j++)
        {
            TableCell tc = new TableCell();
            ImageButton ib = new ImageButton();
            ib.Click += new ImageClickEventHandler(ImageButton1_Click);
            ib.ImageUrl = "../img/defaultCell.jpg";
            ib.ID = i + ":" + j;
            tc.Controls.Add(ib);
            tc.Width = 25;
            tc.Height = 25;
            tr.Cells.Add(tc);
        }
        GameTable.Rows.Add(tr);
    }

}

图片按钮不会触发点击事件。但是,如果“ib.ID = ...”行被注释掉,他们会这样做!这种单一的交替似乎解决了所有问题。我不知道为什么。如果有人可以解释这一点,并告诉我如何触发事件以保持设置按钮 ID 的能力,我将非常感谢

于 2009-06-02T19:15:53.043 回答
0

确保使用OnClick而不是onClick

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

于 2009-09-16T21:48:04.850 回答
0

我遇到了同样的问题,我正在动态创建一个 ImageButton 并且单击该事件没有触发。因此,我在 if (IsPostBack) 中创建了 Image 按钮。现在它工作正常。即使页面被刷新,ImageButton 也会被保留。

于 2014-03-12T06:40:46.137 回答
0

您必须在某处以 runat=server 的形式拥有控件,它可以在母版页或 .aspx 文件中。仔细检查母版页表单标记是否为 runat=server

AutoEventWireup 是允许您使用的语法的属性。仔细检查母版页、WebForm 中的设置,也可以在 web.config 中进行设置。

如果这不起作用,您可以随时对其进行显式编码(我更喜欢)

<script runat=server>

protected override void OnInit(EventArgs e)
    {
        btnSubmit.Click += delegate(object sender, EventArgs e1)
        {

        };
        base.OnInit(e);
    }

</script>

UpdatePanel 也可能会引发服务器端事件,因此请尝试不使用 UpdatePanel。而且我确信您在母版页中有一个 ScriptManager

于 2009-04-25T01:25:12.987 回答
0

从您提供的代码中,您似乎缺少<asp:scriptmanager>页面中的代码。您必须执行以下操作之一:

  1. <asp:scriptmanagerproxy>在页面上和<asp:scriptmanager>母版页上都有。
  2. 在您<asp:scriptmanager>的页面上有<asp:scriptmanager>,在母版页上没有。

就个人而言,我建议<form>在母版页上放置标签,但这是个人喜好。

于 2009-04-25T03:04:45.430 回答
0

您可以随时尝试取出 UpdatePanel 并查看它是否有效。我通常在没有 UpdatePanel 的情况下开始,让一切按照我想要的方式工作,然后添加 UpdatePanel 并调试任何导致的问题。

MasterPage 中的表单对我有用,所以@Keltex 提到的 ScriptManager/ScriptManagerProxy 可能是一个问题,尽管我有时会忘记它们并且通常会侥幸逃脱。

使用 UpdatePanel,按钮的单击事件将通过 Javascript 处理,因此您可以获取 FireBug 或等效项(取决于浏览器)并跟踪实际发生的情况。它是否因验证而绊倒而您没有看到它?某处是否存在 JS 错误(控制工具包并不总是完美的)?该页面实际上是否完全回发而只是没有点击事件处理程序?

于 2009-04-25T04:01:41.113 回答
0

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

您甚至需要分配ID吗?- 无论如何,这肯定是为你完成的吗?- 真正删除 'ib.ID = i + ":" + j;'

于 2009-07-23T21:12:23.690 回答
0

我遇到了同样的问题,即OnClickImageButton 的事件没有触发。但实际的问题是,在形式层面,我有 onSubmit="return false;"

于 2013-04-04T11:59:39.697 回答
0

我刚刚解决了启用 OutputCache 的类似问题。从 更改asp:ImageButton为 时asp:Button,事件被正确触发。OutputCache可能asp:ImageButton有一些错误。

于 2014-12-19T22:22:33.960 回答
0

在上述建议都对我不起作用之后,我通过调用 OnInit() 中的按钮创建又做了一次尝试。这解决了我的问题,现在 OnClick 事件正在触发。

于 2015-05-20T11:15:24.940 回答