Pregunta

Estoy trabajando en un sitio web ASP.NET/C#.

Estoy leyendo datos de una base de datos, guardándolos en un diccionario

Dictionary<string, decimal> Results

y luego vincularlo a un gráfico ASP.NET

PieChart.Series["Series"].Points.DataBind(Results, "Key", "Value", string.Empty);  

Quiero cambiar la etiqueta de un punto cuando hago clic en un botón.

protected void Button_Click(object sender, EventArgs e)
{
    PieChart.Series["Series"].Points[0].Label = "abc"
}

Pero el problema cuando hago clic en el botón, se produce un PostBack y los datos guardados en el diccionario "Resultados" se pierden al igual que el gráfico.

¿Hay alguna manera de no perder los datos cuando se produce una devolución sin tener que volver a leer de la base de datos?

Gracias por la ayuda.

¿Fue útil?

Solución

Sí. Utilice ViewState para conservar los datos entre la devolución de datos.

public Dictionary<string, decimal> Results
{ 
  get { return ViewState["Results"]; }
  set { ViewState["Results"] = value; }
}

Nota: Verifique el valor nulo de viewstate; de lo contrario, arrojará una excepción o error

Otros consejos

Puede poner los datos en ViewState o Session para luego poder sacarlos "del otro lado".

Una solución mejor que usar ViewState y pasar estos datos de un lado a otro del cliente puede ser crear una identificación de cliente que cada una se pase de un lado a otro y mantener un caché de estos datos en el lado del servidor, codificado por esta identificación . De esa manera, no es necesario enviar estos datos de cliente a servidor cada vez, solo al revés.

Esto todavía me suena mal, pero es una mejor solución que algunas de las otras respuestas que involucrarían demasiada sobrecarga debido al intercambio de datos.

De hecho, dado que solo está cambiando la información de visualización y, según su pregunta, no creo que esté procesando estos datos de ninguna manera, me parece que esto es realmente un trabajo para algún tipo de javascript junto a su página ASP.NET. Nunca he hecho esto, pero algunas búsquedas básicas en Google sí arrojaron algunas < a href="http://dotnetslackers.com/articles/aspnet/JavaScript_with_ASP_NET_2_0_Pages_Part1.aspx" rel="nofollow"> artículos sobre esto.

En lugar de usar ViewState, ¿por qué no mueve su código para asignar valor al diccionario a una función y luego llama a esa función desde page_load en cada devolución de datos?De esta manera no perderá datos de su gráfico.

A menudo uso asp: HiddenField para almacenar pequeñas cantidades de datos no seguros en el lado del cliente.

En la función Page_Load () puede establecer el valor del campo oculto, y luego puede volver a leerlo en funciones que se llamarán más tarde.

No use esto para datos seguros, ya que el usuario cliente puede hacer una Ver fuente para ver los datos en la página si lo desea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top