Ho un problema con il quale lo stato di visualizzazione di un ripetitore, ovvero i controlli all'interno del ripetitore, non stanno mantenendo il loro stato di visualizzazione.Manutenzione dello stato di vista di un ripetitore
Ho il seguente:
Ripetitore 1:
<asp:Repeater ID="rptImages" runat="server">
<ItemTemplate>
<asp:LinkButton Text="Add" CommandName="Add" CommandArgument=<%# Eval("ID") %> runat="server" />
</ItemTemplate>
</asp:Repeater>
Quando il pulsante link viene cliccato il valore del CommandArgument è memorizzato in un campo nascosto nella pagina.
Al momento del postback non è possibile ottenere il valore del campo nascosto finché non è stato caricato il gestore eventi del prerender. Così nel mio evento PreRender Afferro il valore del campo nascosto e conservarla in una proprietà List, in questo modo:
if (!string.IsNullOrEmpty(this.SelectedImageIDsInput.Text)) {
this.ImageList.Add(this.SelectedImageIDsInput.Text);
}
E la proprietà Elenco sembra in questo modo:
public List<string> ImageList {
get {
if (this.ViewState["ImageList"] == null) {
this.ViewState["ImageList"] = new List<string>();
}
return (List<string>)(this.ViewState["ImageList"]);
}
set { this.ViewState["ImageString"] = value; }
}
Una volta che ho immagazzinato il valore nella mia proprietà nell'elenco I legare il mio secondo ripetitore (ancora una volta all'interno della manifestazione PreRender):
this.rptSelectedImages.DataSource = this.LightBoxControl.ImageList;
this.rptSelectedImages.DataBind();
il secondo ripetitore ha una DropDownList e una casella di testo all'interno di esso. Il problema è che il viewstate di questi controlli figlio non viene mantenuto. Presumo che sia perché con ogni postback sto riconciliando il ripetitore, quindi è ricostruito. Quello che non so è come posso aggirare questo? La proprietà ImageList viene aggiornata solo su un postback, quindi ovviamente devo riassociare il ripetitore con ogni postback - come altro si può fare?
Qualsiasi aiuto sarebbe molto apprezzato.
Grazie Al
Hi CodeKing. Due problemi però - non posso ottenere il valore del campo nascosto già dall'evento Init - più la proprietà ImageList può essere aggiornata solo sul postback ..... – higgsy
In tal caso è necessario eseguire nuovamente il bind del secondo ripetitore su ogni chiamata che utilizza il valore nel campo nascosto. – TheCodeKing
Hi CodeKing - questo è esattamente quello che sto facendo anche se non è vero? Sto fraintendendo la tua risposta. Al momento attendo fino a quando l'onprerender ottiene il valore del campo nascosto e poi re-associ il ripetitore - il problema con questo è il viewstate dei controlli nel ripetitore non persistere sui postback .... – higgsy