1

Panelコントロールがループ内にイベントを持っている場合、プログラムでコントロールを追加するのに問題があります。これが私のコードです:

pnlAccompanies.Controls.Clear();

foreach (var accompany in this.RetrieveAccompanyList())
{
    var btnRemoveAccompany = new LinkButton();
    btnRemoveAccompany.CommandArgument = accompany.AccompanyID.ToString();
    btnRemoveAccompany.CssClass = "close";
    btnRemoveAccompany.Controls.Add(new Literal() { Text = "×" });
    btnRemoveAccompany.Click += this.btnRemoveAccompany_Click;
    smGTPForm.RegisterAsyncPostBackControl(btnRemoveAccompany);

    pnlAccompanies.Controls.Add(btnRemoveAccompany);
}

そして、これが私のイベントのコードです:

protected void btnRemoveAccompany_Click(object sender, EventArgs e)
{
    var accompanyID = ((LinkButton)sender).CommandArgument.Parser<int>();
    var accompanies = this.RetrieveAccompanyList();
    if (accompanies.Exists(o => o.AccompanyID == accompanyID))
    {
        accompanies.RemoveAll(o => o.AccompanyID == accompanyID);
        HttpContext.Current.Session["gtpd_accompany01"] = accompanies;
        this.PopulateAccompanyList();
    }
}

に 2 つ以上の値があるaccompanies場合、 の戻り値((LinkButton)sender).CommandArgument は常にループの最後の値になります((LinkButton)sender).CommandArgument。なぜこのようになっているのですか?

私のコードは C# 4.0、ASP.NET、VS2010 Pro でビルドされています。

助けてください。前もって感謝します。

4

1 に答える 1

2

btnRemoveAccompanyにID値を割り当てていないため、このボタンをクリックすると、すべてのコントロールが同じ属性を持っているため、イベントはこのイベントを発生させたコントロールを認識しません。すべてのコントロールにID値を追加してみてください。

于 2013-01-25T06:44:52.310 に答える