0

ダイナミクス ボタンとイベントを使用しようとしています。静的ボタンをクリックして動的ボタンを表示したとき。しかし、動的ボタンをクリックすると、dinamikButon_Click イベントが機能しませんでした。私の間違いは何ですか?申し訳ありませんが私の言語。事前にt​​hx。

Default.aspx.cs は以下のとおりです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TestWebApplication
{
public partial class _Default : Page
{
    int i = 1;
    Button dinamikButon;
    protected void Page_Load( object sender, EventArgs e )
    {

    }

    protected void btnStatik_Click( object sender, EventArgs e )
    {
        dinamikButon = new Button
        {
            Text = "Dinamik" + i,
            ID = "btnDinamik" + i,
            CommandArgument = "commandArgument",
            CommandName = "commandName"

        };
        dinamikButon.Click += dinamikButon_Click;
        panel1.Controls.Add( dinamikButon );
        i++;
    }

    void dinamikButon_Click( object sender, EventArgs e )
    {
        Label1.Text = "Merhaba dinamik butondan geliyorum.";
    }

}
}
4

2 に答える 2

2

これは、ページがポストバックするときにボタンが存在しないためです。ページ Load または PreInit にボタンを作成する必要があります。Microsoft はPreInitを推奨しています You can dynamically set a master page or a theme for the requested page, and create dynamic controls.

    int i = 1;
    Button dinamikButon;
    private void Page_PreInit(object sender, EventArgs e)
    {
        if(Page.IsPostBack)
        {
            CreateButton();
        }
    }

    protected void btnStatik_Click( object sender, EventArgs e )
    {
        CreateButton();
    }

    private void CreateButton()
    {
        dinamikButon = new Button
        {
            Text = "Dinamik" + i,
            ID = "btnDinamik" + i,
            CommandArgument = "commandArgument",
            CommandName = "commandName"

        };
        dinamikButon.Click += dinamikButon_Click;
        panel1.Controls.Add( dinamikButon );
        i++;
    }

アップデート:

ビューステート、クエリ文字列、またはセッションのいずれかを使用してボタンが作成されたことを指定する必要があります。

この例では、セッションを使用します。

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        if (Page.IsPostBack)
        {
            if (Session["Created"] != null)
            {
                CreateButton();
            }
        }
    }

    private void CreateButton()
    {
        dinamikButon = new Button
        {
            Text = "Dinamik" + i,
            ID = "btnDinamik" + i,
            CommandArgument = "commandArgument",
            CommandName = "commandName"

        };

        Panel1.Controls.Add(dinamikButon);
        dinamikButon.Click += dinamikButon_Click;
        i++;
        Session["Created"] = "true";
    }

    private void dinamikButon_Click(object sender, EventArgs e)
    {
        //your action here
    }
于 2015-01-04T23:08:23.783 に答える
0

動的ボタンを使用して「Label1」コントロールに値を入力するには

デフォルト.aspx

                <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="DynamicCtrl._Default" %>

                <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                <html xmlns="http://www.w3.org/1999/xhtml">
                <head runat="server">
                    <title></title>

                    <script type="text/javascript" language="javascript">
                        function dynamicevnt() {
                            document.getElementById("Label1").innerHTML = "Merhaba dinamik butondan geliyorum.";
                            return false;
                        }
                    </script>

                </head>
                <body>
                    <form id="form1" runat="server">
                    <div>
                        <asp:Button ID="btnStatik" runat="server" Text="Click" OnClick="btnStatik_Click" />
                        <asp:Label ID="Label1" runat="server"></asp:Label>
                        <asp:Panel ID="panel1" runat="server">
                        </asp:Panel>

                    </div>
                    </form>
                </body>
                </html>

Default.aspx.cs

            using System;
            using System.Collections.Generic;
            using System.Linq;
            using System.Web;
            using System.Web.UI;
            using System.Web.UI.WebControls;

            namespace DynamicCtrl
            {
                public partial class _Default : System.Web.UI.Page
                {

                    protected void Page_Load(object sender, EventArgs e)
                    {

                    }
                    protected void btnStatik_Click(object sender, EventArgs e)
                    {
                        CreateButton();
                    }
                    private void CreateButton()
                    {
                        int i = 1;
                        Button dinamikButon = new Button();
                        dinamikButon.Text = "Dinamik" + i;
                        dinamikButon.ID = "btnDinamik" + i;
                        dinamikButon.OnClientClick = "return dynamicevnt();";
                        dinamikButon.Click += new EventHandler(dinamikButon_Click);
                        panel1.Controls.Add(dinamikButon);
                        i++;
                    }
                    protected void dinamikButon_Click(object sender, EventArgs e)
                    {
                        Label1.Text = "Merhaba dinamik butondan geliyorum.";
                    }
                }
            }
于 2015-01-06T13:13:54.017 に答える