【问题标题】:c# how can i call click event of image button in html generic control?c#如何在html通用控件中调用图像按钮的单击事件?
【发布时间】:2012-03-22 10:35:17
【问题描述】:

我试图调用点击事件,但它没有调用它 我试过这个代码:像

objImage.Click += new ImageClickEventHandler(WebForm4.ImageButtons_Click);
objImage.Click += WebForm4.ImageButtons_Click; 

我的代码:

public HtmlGenericControl CreateDIV_OyVerme_Sub_Yildiz(string id, int subId)
{
    HtmlGenericControl objDiv = new HtmlGenericControl("div");
    objDiv.ID = strControlName_DivYildiz + id + "_" + subId;

    objDiv.Attributes.Add("class", strClassName_DivYildiz);
    //objDiv.Attributes.Add("runat", "server");

    ImageButton objImage = new ImageButton();
    objImage.Attributes.Add("runat", "server");
    objImage.CommandArgument = id; 
    //objImage.Src = strImgSrc_yildiz;
  objImage.Click += new ImageClickEventHandler(WebForm4.ImageButtons_Click);
   //objImage.Click += WebForm4.ImageButtons_Click; 
    objImage.Attributes.Add("onclick", "WebForm4.ImageButtons_Click();");

    objImage.ID = strControlName_ImageYildiz + id +"_" + subId;
    objImage.ImageUrl = strImgSrc_yildiz;
   objImage.OnClientClick = strOnClientClickFunc_yildiz;
   // objImage.Attributes.Add("OnClick","WebForm4.amethod (o;"); 
    objImage.Style.Add(HtmlTextWriterStyle.Height, "19px");
    objImage.Style.Add(HtmlTextWriterStyle.Width, "20px");
    objImage.Style.Add(HtmlTextWriterStyle.BorderWidth, "0px");
    objImage.Style.Add(HtmlTextWriterStyle.Position, "relative");
    objImage.Style.Add(HtmlTextWriterStyle.Top, "13px");
    objImage.Style.Add(HtmlTextWriterStyle.Left, "6px");
    objImage.Style.Add("float", "left");
    objImage.ToolTip = subId + "/" + 5;
    // calling the method 
   // objImage.Attributes.Add("OnClientClick", "return(GetRssID(objRssItem));");

  //  var duck = objRssItem;

  //  objImage.Click += (s, e) => { WebForm4.amethod(objRssItem); };
   //objImage.Click += WebForm4.amethod (objRssItem); 

    objDiv.Controls.Add(objImage);

    return objDiv;
}

【问题讨论】:

  • 要么将objImage.Attributes.Add("onclick", "WebForm4.ImageButtons_Click();"); 替换为objImage.Attributes.Add("onclick", strOnClientClickFunc_yildiz);,要么删除objImage.Attributes.Add("onclick", "WebForm4.ImageButtons_Click();");onclickOnClientClick 在客户端运行,而Click 在服务器端运行。
  • 首先为服务器端点击注册服务器端事件处理程序,然后为客户端点击注册服务器端事件处理程序,然后为客户端注册客户端事件处理程序点击,清理你的代码。

标签: c# asp.net htmlgenericcontrol


【解决方案1】:

您不需要添加属性:onclick。 删除这一行: objImage.Attributes.Add("onclick", "WebForm4.ImageButtons_Click();");
你可以这样做:

    ImageButton img = new ImageButton();
        img.Click+=new ImageClickEventHandler(img_Click);
        img.ID = "img";
        img.Attributes.Add("runat","server");

        form1.Controls.Add(img);

【讨论】:

  • public static void ImageButtons_Click(Object sender, ImageClickEventArgs e) { ImageButton objImage = (ImageButton) sender; var myId = objImage.Attributes["MyId"]; var mySubId = objImage.Attributes["MySubId"]; }
  • 你能告诉我到底发生了什么吗?您在页面浏览器上看到图像了吗?当您单击它时,它不会出现该功能?你有没有尝试在函数中使用刹车点?
【解决方案2】:

注册事件处理程序没有问题 - 以下任何一行都会注册事件处理程序:

objImage.Click += new ImageClickEventHandler(WebForm4.ImageButtons_Click);
objImage.Click += WebForm4.ImageButtons_Click; 

这是一个动态生成的图片按钮,所以要让事件处理程序工作,你需要确保

  1. 必须重新创建图像按钮并将其添加到后续回发时的控制层次结构中。如果回发时控件不存在,则它无法引发事件。
  2. 您必须确保控件在回发时具有相同的 ID。不仅它必须在相同的控制层次结构中,而且它的父级也需要具有相同的 id。要点是控件使用其 ID 定位。
  3. 必须尽早将控件(图像按钮)添加到页面的控件层次结构中 - Page_Init 是最好的,但如果这不可能,那么 page_load 可能会起作用。在任何后续事件中创建控件都不会触发回发事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 1970-01-01
    相关资源
    最近更新 更多