Tengo una página web donde los usuarios deben ingresar la información de contacto del cliente. Podrían ingresar de 0 a un número infinito de contactos.Agregar un control a una lista de controles dinámicamente
he creado este código de página en la página:
<ajaxToolkit:ToolkitScriptManager runat="Server" EnablePartialRendering="true" ID="ScriptManager1" />
<asp:PlaceHolder ID="phCustomerContacts" runat="server" EnableViewState="true">/asp:PlaceHolder>
<asp:LinkButton ID="btnAddContact" runat="server" OnClick="btnAddContact_Click" CssClass="LinkButton" Text="Add Contact"/>
En mi código detrás añadí esto:
public void btnAddContact_Click(object sender, EventArgs e)
{
IList<CustomerContactProfile> customerContacts = new List<CustomerContactProfile>();
if (ViewState["CustomerContactList"] != null)
customerContacts = (List<CustomerContactProfile>)ViewState["CustomerContactList"];
CustomerContactProfile contactProfile = (CustomerContactProfile)LoadControl("~/Controls/Embedded/CustomerContactProfile.ascx");
customerContacts.Add(contactProfile);
foreach (CustomerContactProfile contact in customerContacts)
phCustomerContacts.Controls.Add(contact);
ViewState["CustomerContactList"] = customerContacts;
}
Este código no funciona debido a que el ViewState no puede manejar el almacenamiento de todos que controlan los datos. Sin embargo, no puedo pensar en otra forma de almacenar los controles que ya fueron agregados.
El viewstate del control asp:PlaceHolder
no guarda nada y necesito que los controles se guarden para que si un usuario ingresa algunos datos en el primer control, los datos no se pierdan cuando agreguen un segundo y pronto.
¿Alguna razón particular tiene que estar en Viewstate? Puede probar Session en su lugar. – asawyer
La sesión estaría bien, pero si el usuario abandona la página, ¿no llenaría la sesión? –
La sesión no es el lugar perfecto para el estado basado en página. Por un lado, significa que, a menos que tomara medidas adicionales, el usuario no podría ver dos de estas páginas en dos ventanas separadas, lo que debería ser posible en la mayoría de las aplicaciones web. –