【问题标题】:How to bind event handler for custom control如何为自定义控件绑定事件处理程序
【发布时间】:2012-12-04 05:30:18
【问题描述】:

我是 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";
    }

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

'GenerateClickEvent' 未定义

我在哪里做错了。我尝试声明像public event EventHandler GenerateClickEvent; 这样的事件,但我无法更进一步。你能告诉我如何实现这一目标吗?

我也试过用 .aspx 页面中的 javascript 函数作为

function GenerateClickEvent() {

        alert('clicked');
    }

alert('clicked'); 没有触发。

【问题讨论】:

  • GenerateClickEvent 你为此定义了jacascript吗
  • 是的。查看我编辑的问题一次

标签: c# asp.net custom-controls


【解决方案1】:

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

 mycustctrol.searchBtn.OnClientClick = "GenerateClickEvent()"

以及类似的事件点击

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

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

【讨论】:

  • 对于 javascript 它工作正常。但是对于事件,它给出了以下错误。 Cannot implicitly convert type 'System.EventHandler' to 'System.Web.UI.ImageClickEventHandler'while 编译
  • if(!Page.IsPostBack)条件下绑定事件是否正确?
  • 如果我在页面加载的if条件之外编写绑定事件和customcontrol对象,它工作正常。
  • ohhhh 不要以你拥有它的方式使用它你没有在你的情况下发回负载
  • 我不明白。在if 条件下还是在if 条件之外写更好?
猜你喜欢
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
相关资源
最近更新 更多