【问题标题】:ASP.NET ImageButton Click eventASP.NET ImageButton 点击​​事件
【发布时间】:2018-05-27 14:44:56
【问题描述】:

我有一个动态的 ImageButton,我希望它在被点击时触发一个方法。我有以下代码,不幸的是它不起作用。

ImageButton imb = new ImageButton();
imb.Attributes.Add("runat", "server");
        imb.Click += new ImageClickEventHandler(ImageButton1_Click);
        imb.ID = "ID";
        imb.ImageUrl = "link to image";
Panel1.Controls.Add(imb);

protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
    //it should go here
}

【问题讨论】:

  • 你拼错了runat。此外, OnClientClick 用于 javascript,请将其删除。是否有某些原因您不能只将控件放在页面上?
  • 修复了“runat”并删除了 OnClientClick。该控件已添加到 ASP 面板,但仍无法正常工作。
  • 使用当前代码更新您的问题。
  • 问题已更新为当前代码。

标签: c# asp.net imagebutton


【解决方案1】:

您必须将您的 ImageButton 添加到合适的容器中。

例如:

 form1.Controls.Add(Imb);
 /// form1 must have runat=server

您可以在here 找到有用的提示。

【讨论】:

  • 是的,它在 ASP 面板中。 Panel1.Controls.Add(imb);
【解决方案2】:

向页面添加动态控件是一件棘手的事情。不幸的是,您不能仅仅声明一个WebControl 派生类型的对象并期望它能够工作。

在 ASP.NET WebForms 中,有一个名为Page Lifecycle 的概念。这是一个广泛的问题,但我的观点是,您必须遵守特定的顺序才能将动态控件插入页面。下面是一个实际的例子。

从类级别的动态控件声明开始。

protected ImageButton imb = null;

然后在页面初始化期间对其进行初始化。一种可能性是处理PreInit 事件。

protected void Page_PreInit(object sender, EventArgs e)
{
    imb = new ImageButton()
    {
        ID = "ID",
        ImageUrl = "link to image"
    };

    imb.Click += Imb_Click;

    Panel1.Controls.Add(imb);

}

private void Imb_Click(object sender, ImageClickEventArgs e)
{
    // Do your stuff
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // Set initial properties as appropriate. E.g.
        imb.AlternateText = "...";
    }
}

你可以走了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多