0

<asp:Button>コードで作成された関数を on click イベントを介して呼び出そうとしていますが、機能していません...

protected void Page_Load(object sender, EventArgs e)
{       
            SqlConnection sqlcon = new SqlConnection(ConfigurationManager.ConnectionStrings["Con"].ToString());
            ArrayList myArrayList = ConvertDataSetToArrayList();
            Literal objliteral = new Literal();
            StringBuilder objSBuilder = new StringBuilder();

        // Display each item of ArrayList
        foreach (Object row in myArrayList)
        {
            objSBuilder.Append("<div class='AppItem'>");                
            objSBuilder.Append("<label class='control-label span3'>" + ((DataRow)row)["PlanName"].ToString() + "</label>");
            objSBuilder.Append("<label class='control-label span3'> Plan Description :" + ((DataRow)row)["PlanDesc"].ToString() + "</label>");
            objSBuilder.Append("<label class='control-label span3'> Price :" + ((DataRow)row)["PlanCost"].ToString() + "</label>");
            objSBuilder.Append("<label class='control-label span3'> Total Visitors :" + ((DataRow)row)["PlanVisitors"].ToString() + "</label>");
            objSBuilder.Append("<div class='control-group'><asp:Button Text='AddtoCart' runat='server' id='" + ((DataRow)row)["PlanId"].ToString() + "' class='btn btn-small btn-success' onclick='AddPlanToCart();' /></div>");

            //<asp:Button ID="ImageButton1" runat="server" Text="Upload" CssClass="btn btn-small btn-success" onclick="ImageButton1_Click" />
            objSBuilder.Append("</div>");
        }
        objliteral.Text = objSBuilder.ToString();
        PlanContent.Controls.Add(objliteral);
}

private void AddPlanToCart()
{    
        //This does not get called.
}

コードビハインドを見るにはここをクリック

4

3 に答える 3

0

ここでの問題は、クライアント側で実行するコードを生成していることですが、asp.net プロセッサを介して実行するように設計されたスクリプトとタグが含まれています。

objSBuilder.Append("<div class='control-group'><asp:Button Text='AddtoCart' runat='server' id='" + ((DataRow)row)["PlanId"].ToString() + "' class='btn btn-small btn-success' onclick='AddPlanToCart();' /></div>");

[わずかに再フォーマット] を含む HTML を生成します。

<div class='control-group'>
    <asp:Button ... onclick='AddPlanToCart();' />
</div>

<button>明らかに期待しているコントロールの代わりに。

これを修正して、書かれている方法で動作するようにするには、かなりの作業が必要です。<asp:repeater>代わりに、代わりにコントロールを使用するように書き直すことを強くお勧めします。

于 2013-07-18T13:38:45.887 に答える
0

ボタンを作成するときに、クリック イベントを次のようなデリゲートにバインドすることもできます。

Button btn = new Button();
btn.Text = "Button text";
btn.AutoSize = true;
btn.Location = new Point(y, 0);
btn.Click += delegate(object sender, EventArgs e)
{
    solution.Invoke(); 
}; 

この場合Action<>、メソッド内のパラメータとして , を渡しています。ボタンをクリックすると、デリゲートがトリガーされます。たとえば、このボタンが作成され、クリックするとメッセージボックスが表示されます。

Button btn = new Button();
btn.Text = "Button text";
btn.AutoSize = true;
btn.Location = new Point(y, 0);
btn.Click += delegate(object sender, EventArgs e)
{
    MessageBox.Show("Clicked!");
}; 

あなたのシナリオでは、次の行で何かを試してください。

int counter = 0;

// Display each item of ArrayList
foreach (Object row in myArrayList)
{
    Control ctrl = new Control();

    Label lbl = new Label();
    lbl.Text = "Label " + counter.ToString();

    Button btn = new Button();
    btn.Text = "Button text " + counter.ToString(); 
    btn.Click += delegate(object sender, EventArgs e)
    {
        Response.Write("<script>alert('Message for button " + counter.ToString() + "');</script>");
    }; 

    ctrl.Controls.Add(lbl);
    ctrl.Controls.Add(btn);

    counter++; 

    PlanContent.Controls.Add(ctrl);
}
于 2013-07-18T13:43:50.933 に答える