estoy tratando de almacenar un Dictionary<string, string>
en el ViewState de un control personalizado que estoy desarrollando para ASP.NET 2.0:¿Está almacenando el diccionario <cadena, cadena> en el estado de la vista ASP.NET?
private Dictionary<String, String> Items
{
get
{
object d = ViewState["Items"];
return (d == null ? null : (Dictionary<String, String>)d);
}
set
{
ViewState["Items"] = value;
}
}
Acceso que se ve así:
public void UpdateData
{
if (this.Items == null)
this.Items = new Dictionary<string, string>();
else
this.Items.Clear();
//Fill the collection
}
cuando se pone establecer la primera vez que se carga la página, parece funcionar bien. Pero en posteriores devoluciones de datos, el valor devuelto es siempre nulo (la primera condición siempre ocurre). La depuración muestra que obtiene null
de ViewState en la propiedad get
.
He hecho algunas investigaciones y tienen found que las clases deben implementar IStateManager
ser salvable en ViewState y el Dictionary MSDN page parece indicar que Dictionary<TKey, TValue>
no. Pero he almacenado diccionarios antes en ViewState sin ningún problema. ¿Que está pasando aqui? ¿Mi experiencia previa fue un golpe de suerte?
ACTUALIZACIÓN: He intentado añadir algo de código de prueba a la propiedad: ViewState["ItemTest"] = "foo";
en el set
y string test = (string)ViewState["ItemTest"];
en el get
. Como el Dictionary
, sale nulo. Por lo tanto, no parece ser un problema con el Dictionary
siendo serializable. Además, para aclarar, UpdateData
se llama desde mi excepción RenderControl
, que ocurre después de Page_Load
en la página que contiene el control.
¿Dónde está comprobando los valores? Creo que el ViewState se carga después del evento 'Init'. – keyboardP
Como en la comprobación de nulo antes de volver? La primera vez que se carga la página, no va a haber un valor allí. –
¿Su control se agrega estático o dinámico en su página? – ibram