2

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');発砲していません。

4

1 に答える 1

2

おそらく、このようなものが必要です。あなたがしていることは、クライアントのクリックのためです

 mycustctrol.searchBtn.OnClientClick = "GenerateClickEvent()"

イベントクリックの場合はこのようなもの

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

 protected void GenerateClickEvent_Click(object sender, ImageClickEventArgs e) 
  {
        mycustctrol.lblName.Text = "clicked";
  }
于 2012-12-04T06:04:42.457 に答える