2009-06-15 7 views
0

私はこれを機能させるために頭を悩ましています。私のLinkBut​​tonのイベントは発生していません。私はそれがViewStateと何か関係があると考えています。ポストバックや何かの後にイベントを発生させようとすると、ボタンはそこにはありません。ASP.NETでOnCommandを使用してAddHandlerを適用するには

[追加]ボタンをクリックすると、ページへのリンクが追加され、Diplay Timeリンクボタンをクリックするとイベントが発生し、CommandArgumentデータが表示されますが、その理由はわかりません。

<%@ Page Language="VB" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server"> 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 

    End Sub 

    Protected Sub btnDelete_OnCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.CommandEventArgs) 
     Response.Write(e.CommandArgument) 
    End Sub 

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) 
     Dim btn As New LinkButton() 
     btn.ID = "lbn" 
     btn.Text = "Display Time" 
     btn.ValidationGroup = "vgDeleteSigner" 
     AddHandler btn.Command, AddressOf btnDelete_OnCommand 
     btn.CommandArgument = Now.TimeOfDay.ToString() 
     btn.EnableViewState = True 
     Panel1.Controls.Add(btn) 
    End Sub 
</script> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 
     <asp:Panel ID="Panel1" runat="server"> 
     </asp:Panel> 
    </div> 
    </form> 
</body> 
</html> 

答えて

1

起こっている理由は、それがクリックされていますとき、あなたはそれをクリックした後、ボタンが存在しないため、あなたの動的なボタン「LBNは」バックポストに再描画する必要があるということです。

は、ここに私のコードです。

基本的にはそのボタンをクリックしてポストバックすると、そのボタンをページに動的に追加する必要があります。

ボタンは既にページに表示されていても、表示は= falseで、他のボタンをクリックすると表示されることをおすすめします。

+0

@King: "既にページ上にボタンを表示しておいて、visible = falseとし、他のボタンをクリックしたときに表示することをお勧めします。" - はい、これは私がしようとしていることの非常に簡単な例であることを除いては同意します。これは可能な限り不可能です。リンクボタンの数に制限はありません。 – EdenMachine

+0

これが当てはまる場合は、一連のリンクボタンに一連のハイパーリンクがあり、onclickが隠し変数を設定してページのポストバックを引き起こすのではなく、私がやることです。次に、ページがロードされているかどうかを確認するために、変数の内容のポストバックと依存が、コードの背後にある関数を実行します。 – Avitus

+0

それはかなり毛深くなりますが、Page_Loadのコントロールを追加して、ボタンをクリックしてパネルをクリアしても、それを再び追加する必要があります。 – EdenMachine

関連する問題