Próbuję utworzyć złożony formant ASP.NET, który pozwala budować edytowalną kolekcję kontrolną.Liczba dynamicznych elementów sterujących ASP.NET (tworzenie formantów w trakcie pracy)
Mój problem polega na tym, że po naciśnięciu przycisku dodawania lub odświeżania strony (który nie powoduje niczego innego niż odświeżenie formularza) wszelkie wartości wprowadzone w polach tekstowych zostaną utracone.
Nie mogę uruchomić go, gdy liczba elementów sterujących zmienia się między wysyłkami zwrotnymi. Muszę zasadniczo być w stanie odtworzyć drzewo kontrolne w dwóch różnych czasach w cyklu kontrolnym w zależności od właściwości stanu widoku ControlCount
.
Test ten może być stosowany do odtworzenia problemu:
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 za rozwiązanie, działa dobrze, byłem ciekaw tego –
, ponieważ wszystkie 'pola tekstowe' dodane ponownie od początku za każdym razem, gdy pojawią się informacje zwrotne, dlaczego przywracają wartości tekstowe? dawka asp.net czy coś? –
@Rami - tak, to magia Viewstate, kiedy działa dobrze :-) –