如何绑定自定义控件的事件处理程序

时间:2012-12-04 05:30:18

标签: c# asp.net custom-controls

我是asp.net中自定义控件的新手。附加图像按钮的单击事件处理程序时遇到困难。我为服务器控件编写了以下代码。

        ImageButton _imgbtn;
        TextBox txtOutput;
        Label _lblname;
        public ImageButton searchBtn
        {
            get { return _imgbtn; }
            set { _imgbtn = value; }
        }

        public Label lblName
        {
            get { return _lblname; }
            set { _lblname = value; }
        }
        protected override void OnInit(EventArgs e)
        {
             txtOutput = new TextBox();
            txtOutput.Width = 180;
            txtOutput.ID = "ResultOutput";
            txtOutput.Enabled = false;
            Controls.Add(txtOutput);

            searchBtn = new ImageButton();
            Controls.Add(searchBtn);
            lblName = new Label();
            lblName.Text = "";
            Controls.Add(lblName);

        }
        protected override void RenderContents(HtmlTextWriter output)
        {
            //base.Render(output);
            txtOutput.RenderControl(output);
            searchBtn.RenderControl(output);
            lblName.RenderControl(output);
        }

我将此自定义控件添加到带有寄存器标记的.aspx页面中,如下所示。

<%@ Register TagPrefix="mycontrol" Namespace="MyControl" Assembly="MyControl" %> 

在aspx.cs文件中,我给出了如下属性值,

        CustomControl mycustctrol;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                mycustctrol = myCust as CustomControl;
                mycustctrol.searchBtn.ImageUrl = "~/Images/searchicon.png";
                mycustctrol.searchBtn.OnClientClick = "GenerateClickEvent"

            }
        }


public void GenerateClickEvent(object sender, EventArgs args)
    {
        mycustctrol.lblName.Text = "clicked";
    }

运行此应用程序后,我收到以下错误。

  

&#39; GenerateClickEvent&#39;未定义

我做错了。我尝试宣布像public event EventHandler GenerateClickEvent;这样的事件,但我无法继续前进。能否告诉我如何实现这一目标。

我也尝试使用.aspx页面中的javascript函数

function GenerateClickEvent() {

        alert('clicked');
    }

alert('clicked');没有解雇。

1 个答案:

答案 0 :(得分:2)

你可能想要这样的东西你正在做的是客户点击

 mycustctrol.searchBtn.OnClientClick = "GenerateClickEvent()"

等事件点击

 mycustctrol.searchBtn.Click += new ImageClickEventHandler(GenerateClickEvent_Click);

 protected void GenerateClickEvent_Click(object sender, ImageClickEventArgs e) 
  {
        mycustctrol.lblName.Text = "clicked";
  }