2012-01-01 15 views
2

ボタンを作成し、それをPlaceHolderに配置するコードビハインドでメソッドを作成したいとします。このボタンにClickイベントが必要です。動的ボタンでクリックイベントを呼び出せません

「テスト」メソッドの呼び出し後、ボタンは正しく配置されますが、クリックイベントは呼び出されません。

private void test() 
    { 
     Button linkBtn1 = new Button(); 
     linkBtn1.Text = "linkBtn1"; 
     linkBtn1.OnClientClick = "return false;"; 
     linkBtn1.Click += new EventHandler(linkBtn1_Click); 
     PagesPlaceHolder.Controls.Add(linkBtn1);   

    } 

    void linkBtn1_Click(object sender, EventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 
+6

多分ので、このラインの 'linkBtn1.OnClientClickは=「falseを返します;」; '? – oleksii

+0

それは確かにOnClientClickを削除しないか、他の動作を上書きするために何かを返す場合は、trueを返してクリックさせます。 – Aristos

答えて

2

OnClientClick = "return false;"を削除する必要はありますが、これを動作させるには十分ではありません。動的に追加されたボタンのイベントハンドラーをトリガーする場合は、がロードされるたびにボタンを追加する必要があります。

簡単な方法の1つは、ボタンがViewStateに追加されていることを保存し、PageLoadでそのボタンを確認し、必要に応じてボタンを再度追加することです。ここで

は、私の作品のサンプルだ(とクリックされたときに例外がスローされます)

protected void Page_Load(object sender, EventArgs e) 
{ 
    //if the button was added previously, add it again 
    if (ViewState["Added"] != null && (bool)ViewState["Added"]) 
     addButton(); 
} 

//this is the method that adds the button 
protected void add_Click(object sender, EventArgs e) { 
    ViewState["Added"] = true; 
    addButton(); 
} 

private void addButton() { 
    Button linkBtn1 = new Button(); 
    linkBtn1.Text = "linkBtn1"; 
    linkBtn1.Click += new EventHandler(linkBtn1_Click); 
    placeholder1.Controls.Add(linkBtn1); 
} 

void linkBtn1_Click(object sender, EventArgs e) { 
    throw new Exception("Button Click Event Triggered. Hello yellow screen!!!"); 
} 
0

@oleksiiが指摘しているように、clientsideコードがfalseを返すようにして、フォームが決して送信されないようにします。これをコメントアウトする必要があり、イベントハンドラが起動するはずです。

関連する問題