我在网页上创建了一个按钮,单击该按钮将从
Server.MapPath(...)
获取图像并将图像转换为 ImageButtons。单击这些图像按钮后,它们应该出现在另一个放大的图像中。
图像(作为按钮)在网站上显示正确并且可以单击,但是没有任何反应。 调试表明
imgBtnClick
方法从未被调用过。
问题是ImageClickEventHandler中指定的方法没有被触发。 非常感谢任何关于为什么会发生这种情况的建议。
请在下面找到我的代码示例。
单击主按钮时执行的代码
protected void Logo_Click(object sender, ImageClickEventArgs e)
{
Logo.CssClass = "Highlight";
Images();
Panel_Photo.Visible = true;
}
Images 方法,为
Server.MapPath(...)
处的所有图像创建动态图像按钮
protected void Images()
{
foreach (string strFileName in Directory.GetFiles(Server.MapPath("~/images/Photos/Stuff")))
{
ImageButton imgBtn = new ImageButton();
FileInfo fileInfo = new FileInfo(strFileName);
imgBtn.ImageUrl = "~/images/Photos/Stuff/" + fileInfo.Name;
imgBtn.Width = Unit.Pixel(100);
imgBtn.Height = Unit.Pixel(100);
imgBtn.Style.Add("padding", "5px");
imgBtn.Click += new ImageClickEventHandler(imgBtnClick);
imgBtn.OnClientClick = "return false";
Panel_Photo.Controls.Add(imgBtn);
}
}
最终方法应在另一个图像中显示单击的图像按钮中的图像
void imgBtnClick(object sender, ImageClickEventArgs e)
{
LabelPhoto.Text = "test";
ImageClicked.ImageUrl = ((ImageButton)sender).ImageUrl;
}
标签和“ImageClicked”是在 aspx 页面中创建的
<asp:Image ID="ImageClicked" runat="server"></asp:Image>
Panel_Photo
和 ImageClicked
位于不同的 div 中,在网页上彼此相邻。
@ademg 和 @Greg 的评论都帮助我找到了解决方案。
我基本上必须将整个
foreach
代码块放入 Page_Load 方法中并删除该行 imgBtn.OnClientClick = "return false";
每当点击
imgBtn
(图像)时,网页就会跳转到顶部,但这是另一个需要研究的问题。
我遇到了同样的问题,但设置这些属性后它工作正常。
ImageButton btnRepair = new ImageButton();
btnRepair.ID = "btnRepair";
btnRepair.EnableViewState = true;
btnRepair.CausesValidation = false;
btnRepair.ImageUrl = "img/btns/RepairKey.png";
btnRepair.Click += new ImageClickEventHandler(btnRepair_Click);