我有一个页面,它使用母版页,几个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事件。如果我删除母版页并向页面添加表单标签,它就可以工作。是否不支持母版页中的表单标记,或者这应该以某种方式工作?
alt text http://digitalcopy.warnerbros.com/images/mainmenu.gif?provider=00079&disc=03403AAA-1D20-47F2-91FA-5EE632832659
答案 0 :(得分:11)
您还可以检查您的ImageButton是否未触发验证。如果它确实将其CausesValidation属性设置为false(当然,如果有意义的话)。
答案 1 :(得分:4)
我有类似的问题(不同的情况)。我使用Page.RegisterRequiresRaiseEvent(ImageButton)
并且我的onclick事件开始激活。为什么我需要这样做?我不知道。
答案 2 :(得分:3)
我的解决方案是将ImageButton的CausesValidation设置为false。
答案 3 :(得分:2)
我在图像按钮上遇到了类似的问题并找到了根本原因。您正在使用
“ib.ID = i + ":" + j;
”
作为ImageButton
的ID,“:
”是非法使用的名称,因为您以编程方式创建它,ASP.NET允许创建它。
在运行时,如果查看页面的HTML源代码,您将看到特殊字符被忽略或替换为“_
”。因此页面无法找到正确的控件,因此事件不会触发。尝试使用纯文本更改名称,事件将触发。
答案 4 :(得分:2)
ib.ID = i + ":" + j;
应改为
ib.ID = i.toString()+":"+j.toString();
如果仍然无效,请尝试使用StringBuilder来构建ID并稍后将其分配给ib.ID属性
答案 5 :(得分:0)
你必须在某个地方使用runat = server形式的控件,它可以在Master页面或.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
答案 6 :(得分:0)
从您提供的代码中,您似乎错过了页面中的<asp:scriptmanager>
。您必须执行以下操作之一:
<asp:scriptmanagerproxy>
,母版页上有<asp:scriptmanager>
。 <asp:scriptmanager>
,母版页上没有<asp:scriptmanager>
。就个人而言,我建议在母版页上使用<form>
标记,但这是个人偏好。
答案 7 :(得分:0)
您可以随时尝试取出UpdatePanel,看看它是否有效。我通常在没有UpdatePanel的情况下启动,以我想要的方式工作,然后添加UpdatePanel并调试导致的任何内容。
MasterPage中的表单对我有用,所以@Keltex提到的ScriptManager / ScriptManagerProxy可能是一个问题,虽然我有时会忘记它们并且通常可以使用它。
使用UpdatePanel,按钮的点击事件将通过Javascript处理,因此您可以使用FireBug或等效的(取决于浏览器)并按照实际情况进行操作。是否绊倒验证,你没有看到它?某处是否存在JS错误(Control Toolkit总是不完美)?该页面实际上是回发而只是没有命中事件处理程序吗?
答案 8 :(得分:0)
在我的网页上,我在updatepanel包含的表格中动态创建图像按钮。按钮由以下代码创建:
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的能力,我会非常感激
答案 9 :(得分:0)
我认为这可能与你在创建&amp;之后重新分配id的事实有关。分配事件处理程序?
你甚至需要分配id吗? - 当然这是为你完成的吗? - 真正删除'ib.ID = i +“:”+ j;'
答案 10 :(得分:0)
确保使用点击而不是 onClick
您的更新面板可能会弄乱回发。尝试不使用UpdatePanel,看看是否是罪魁祸首。
答案 11 :(得分:0)
我有同样的问题,即ImageButton的OnClick
事件未触发。但实际问题是,在表单层面,我有onSubmit="return false;"
答案 12 :(得分:0)
我遇到了同样的问题,我正在动态创建一个ImageButton,并且没有触发该事件的点击。因此,我在if(IsPostBack)中创建了Image按钮。现在工作正常。即使页面刷新,也会保留ImageButton。
答案 13 :(得分:0)
我刚刚解决了启用OutputCache的类似问题。从asp:ImageButton
更改为asp:Button
时,会正确触发事件。可能asp:ImageButton
在OutputCache上有一些错误。
答案 14 :(得分:0)
在上述建议都不适用于我之后,我再次尝试通过调用OnInit()中的按钮创建。这解决了我的问题,现在OnClick事件正在解决。
答案 15 :(得分:0)
这是适合我的解决方案
如果您通过数据绑定控件进行绑定,则使用OnCommand attr而不是OnClick attr