Düzenlenebilir bir denetim koleksiyonu oluşturmanıza izin veren bir bileşik ASP.NET denetimi oluşturmaya çalışıyorum.ASP.NET dinamik denetimleri sayısı (giderken denetimleri oluşturma)
Sorunum, ekleme veya geri gönderme düğmesine bastığımda (formu geri göndermekten başka bir şey yapmadığında) metin kutularına girilen değerlerin kaybolmasıdır.
Denetimlerin sayısı geri gönderimler arasında değiştiğinde çalışmaya yaralamıyorum. Temel olarak, kontrol ağacının görünüm durumu özelliğine göre ControlCount
'a bağlı olarak iki farklı zamanlarda yeniden oluşturulmasına ihtiyacım var.
public class AddManyControl : CompositeControl
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
EnsureChildControls();
}
protected override void CreateChildControls()
{
var count = ViewState["ControlCount"] as int? ?? 0;
for (int i = 0; i < count; i++)
{
var div = new HtmlGenericControl("div");
var textBox = new TextBox();
textBox.ID = "tb" + i;
div.Controls.Add(textBox);
Controls.Add(div);
}
ViewState["ControlCount"] = count;
var btnAdd = new Button();
btnAdd.ID = "Add";
btnAdd.Text = "Add text box";
btnAdd.Click += new EventHandler(btnAdd_Click);
Controls.Add(btnAdd);
var btnPostBack = new Button();
btnPostBack.ID = "PostBack";
btnPostBack.Text = "Do PostBack";
Controls.Add(btnPostBack);
}
void btnAdd_Click(object sender, EventArgs e)
{
ViewState["ControlCount"] = (int)ViewState["ControlCount"] + 1;
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
// If I remove this RecreateChildControls call
// the collection lags behind each postback
// because the count is incremented in the btnAdd_Click event handler
// however, the values are not lost between postbacks
RecreateChildControls();
}
}
+1, iyi çalışıyor, ben tüm 'textboxes' sıfırdan yeniden her seferinde yeniden kazandım, bu yüzden onlar metin değerlerini nasıl geri geldiği için bu –
merak ettim? asp.net dozu do? –
@Rami - evet, iyi çalışıyorsa, Viewstate sihri budur :-) –