/ / ASP.NET: Ako ukladať zástupný symbol v viewstate? - c #, asp.net, viewstate

ASP.NET: Ako ukladať zástupné symboly? - c #, asp.net, viewstate

Snažím sa vytvoriť stránku. ktorý má tlačidlo a miesto. po kliknutí na tlačidlo sa do zástupného symbolu pridá ovládací prvok používateľa.

na každé kliknutie na tlačidlo by sa do zástupného symbolu malo pridať mnoho ovládacích prvkov používateľa.

Snažím sa uložiť zástupný symbol v viewstate na preinit udalosť, ale pri načítaní zástupný symbol z viewstate v zaťažení udalosť viewstate zostáva null.

nižšie je môj kód:

  protected void PreInit(object sender, EventArgs e)
{
this.OnPreInit(e);
if (!Page.IsPostBack)
{
ViewState["c"] = PlaceHolder1;

}
else { PlaceHolder1 = (PlaceHolder)ViewState["c"]; }
}

protected void Page_Load(object sender, EventArgs e)
{

if(IsPostBack)
{ PlaceHolder1=  (PlaceHolder)ViewState["c"]; }

}


public void addDepartmentBtn_Click(object sender, EventArgs e)
{
// User Control Code


c1 = LoadControl("~/AddDepartment.ascx");
PlaceHolder1.Controls.Add(c1);
}

Ak v tomto scenári nie je vhodný pohľad, potom aký je alternatívny spôsob, ako to dosiahnuť?

odpovede:

2 pre odpoveď č. 1

Musíte znova pridať ovládacie prvky do držiaka miesta na každom príspevku späť.

Váš pokus o ViewState vyšteká zlým stromom - ViewState je pre niečo úplne iné a aj keď ste chceli, môžete uložiť len serializovateľné veci do ViewState.


2 pre odpoveď č. 2

Ak sa pokúšate dynamicky pridávať ovládacie prvky na stránku, musíte to urobiť v programe Init na každom spätnom odbere. To znamená, že musíte použiť dátovú štruktúru(niečo, čo v aplikácii ViewState pretrváva) ako zoznam dynamicky vytvorených ovládacích prvkov - NIE samotné ovládacie prvky, ale hash reťazcov, ktoré sa majú použiť ako ID, je bežná metóda.

Zakaždým, keď užívateľ urobí niečo, čo pridána stránku, pridajte kľúč do zoznamu. V okne Page Init (Inicializácia stránky) musíte potom prečítať zoznam a použiť ho na opätovné vytvorenie a pridanie dynamických ovládacích prvkov späť do kolekcie stránok alebo sa nezobrazia na stránke.


1 pre odpoveď č. 3

To nebude fungovať. ASP.NET server kontroly sú príliš zložité vec, ktorá má byť uložená v ViewState. Čo serverové ovládacie prvky robia pomocou ASP.NET dizajnu, ukladá ich dáta (stav, hodnoty vlastností, atď.) Do ViewState stránky.

Čo môžete urobiť, je uložiť v ViewState čísloovládacích prvkov používateľa AddDepartment, ktoré boli vytvorené a pridané do zástupného symbolu. Toto je možné vykonať v PreRender. Potom na spätnom pohľade si toto číslo prečítate z ViewState a vytvoríte a pridáte do zástupného symbolu, ktorý má mnoho prvkov AddDepartment.