[英]ASP.NET - Composite Control - Adding Dynamic Control after CreateChildControls suppresses Button Click event
设置 -我希望用户输入其塑料卡的详细信息。 他们可以单击AddNewCard按钮添加多个卡。
码
[Serializable]
public class Card
{
public string Number { get; set; }
public string Code { get; set; }
}
public class CardControl : CompositeControl
{
private LinkButton _lnkAddNewCard = new LinkButton { Text = "Add Card" };
private PlaceHolder _plcListCards=new PlaceHolder();
private IList<Card> _lstCards
{
get { return (IList<Card>) ViewState["ListCards"]; }
set { ViewState["ListCards"] = value; }
}
protected override void OnInit(EventArgs e)
{
_lnkAddNewCard.Click+=_lnkAddNewCard_Click;
}
void _lnkAddNewCard_Click(object sender, EventArgs e)
{
var lstCards = _lstCards ?? new List<Card>();
lstCards.Add(new Card());
_lstCards = lstCards;
RenderCard(_lstCards[lstCards.Count - 1]);
}
protected override void CreateChildControls()
{
Controls.Clear();
Controls.Add(_lnkAddNewCard);
Controls.Add(_plcListCards);
RenderCards();
}
protected void RenderCards()
{
_plcListCards.Controls.Clear();
if(_lstCards == null) _lstCards = new List<Card> { new Card() };
foreach (var card in _lstCards)
RenderCard(card);
}
protected void RenderCard(Card card)
{
_plcListCards.Controls.Add(new TextBox() { Text = card.Number});
_plcListCards.Controls.Add(new TextBox() { Text = card.Code});
}
}
问题
新卡尚未订阅创建的点击事件。 每次创建新卡时,都需要添加事件处理程序。
var newCard = new Card();
newCard.Click+=_lnkAddNewCard_Click;
_lstCards.Add(new newCard);
你必须打电话
_lnkAddNewCard.Click+=_lnkAddNewCard_Click;
在每个帖子中,因此_lnkAddNewCard_Click将是
void _lnkAddNewCard_Click(object sender, EventArgs e)
{
_lnkAddNewCard.Click+=_lnkAddNewCard_Click;
var lstCards = _lstCards ?? new List<Card>();
lstCards.Add(new Card());
_lstCards = lstCards;
RenderCard(_lstCards[lstCards.Count - 1]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.