0

Lable Text にアンカーがあります。ボタンのクリック時に動的に runat="server" を使用してアンカーを作成しています。期待どおりに作成されます。クリック イベントを使用したいのですが、発生しません。

私のコード:

lblEmail.Text = email + " <a href='#' runat='server' class='crossicon' onclick='removebtn_Click'></a> ";

protected void removebtn_Click(object sender, EventArgs e)
{
}

このボタンのイベントを作成するにはどうすればよいですか? JS を使用したくありません。その場合、新しい値に隠しフィールドを使用する必要があります。

4

3 に答える 3

1

このようにラベルにマークアップ/テキストを追加しても、リンクボタンが追加されたり、サーバーのコントロール ツリーにイベントが登録されたりすることはありません。サーバー イベントと共にコントロールを動的に追加する動作を実現するには、コントロールとイベントを登録する必要があります (以下を参照)。

aspx:

<asp:Panel runat="server" id="pnlEmail">
     <asp:Label runat="server" id="lblEmail"/>
</asp:Panel>

aspx.cs: どのイベントでも、(リンクと共に) ラベル テキストを設定する必要があります。

lblEmail.Text = email;
LinkButton lnkbtnEmail = new LinkButton();
lnkbtn.Click += lnkbtn_Click;
lnkbtn.Text = "Dynamic Link";
pnlEmail.Controls.Add(lnkbtnEmail);

そしてハンドラは

void lnkbtn_Click(object sender, EventArgs e)
{
      // code for your dynamically generated link
}
于 2013-09-03T07:00:08.097 に答える
0

動的に作成されているとは思いません。そのコントロールの ID はどこにありますか。サーバー側のコントロールを作成し、それをプレースホルダー/パネルなどに追加する必要があります

于 2013-09-03T07:02:09.830 に答える
0

デフォルトでは、コントロールは __doPostBack を使用してサーバーへのポストバックを行います。__doPostBack は、コントロールの UniqueID (または HTML では、HTML 要素の name プロパティ) を取ります。2 番目のパラメーターは、起動するコマンドの名前です。

<a href='#' runat='server' class='crossicon' href="javascript:void(0);" onclick="__doPostBack('someuniqueid', '');></a> 

System.Web.UI.Page は既定で IPostBackEventHandler インターフェイスを既に実装しているため、すべてのページに実装する必要はありません。既に存在します。

次のように、ページの RaisePostBackEvent メソッドをオーバーライドできます。

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
    //call the RaisePostBack event 
    base.RaisePostBackEvent(source, eventArgument);

    if (source == SomeControl)
    {
        //do something
    }
}

お役に立てば幸いです。

于 2013-09-03T07:03:09.640 に答える