2009-05-27 24 views
5

Necesito una forma de forzar una devolución de datos o una página de recarga en código subyacente. Intenté usar un javascript pero no funcionó. Al navegar por la red, veo que la primera pregunta es "¿por qué"?Asp.Net (vb) Forzar devolución de datos en código subyacente

Las circunstancias son que tengo una lista desplegable en autopostback, y el parámetro de selección del origen de datos gridview se deriva del valor seleccionado de esa lista desplegable. De modo que la página funciona bien normalmente y los contenidos se actualizan cada vez que se cambia el elemento seleccionado. Pero algunos de los enlaces y botones sacan al cliente de la página para que se vinculen más tarde.

La idea es almacenar la última opción en una sesión y verificar el primer evento page.load si la opción de sesión es distinta de la predeterminada. Ahora puedo cambiar el índice seleccionado de la lista desplegable en función de eso, pero aparentemente la fuente de datos se dispara más rápido que page.load, así que a menos que pueda forzar una recarga, esto no ayudará.

¿Alguna idea? Una devolución/recarga de página completa no es la única opción, por supuesto, solo forzar la actualización de gridview/datasource es suficiente. Simplemente no sé cómo hacer eso aparte de volver a cargar toda la página.

Gracias.

Respuesta

9

Puede poner un temporizador ajax en la página, habilitarlo cuando regresen, lo que provoca un autopostback OnTick tan pronto como se renueva la página, y luego deshabilitarlo, pero para ser honesto ... eso es un trabajo horrendo para un problema trivial.

¿Por qué no puede volver a vincular su GridView después de cambiar programáticamente el valor de la lista desplegable. p.ej. la línea de tiempo sería algo así como.

  • persona regresa a la página (no un post posterior)
  • liga GridView con Valor predeterminado
  • carga de la página
    • Compruebe la variable de sesión
    • Si se encuentra un valor
    • Conjunto su DropDownList valor seleccionado
    • Llame de nuevo al .DataBind() para GridView/DataSource para obligarlo a volver a unir.
+0

Maldición ... estás en un rollo de hoy! :-) 1 – Cerebrus

+0

Hah cheers amigo;) –

+0

Solución genial y sucinta que responde directamente a la pregunta. +1! – Mattygabe

2

Por qué no puedes utilizar un evento de página diferente? ¿Has probado PreRenderComplete? Recuerde que el orden de los eventos es importante en las devoluciones. PreRenderComplete es el último evento que se llamará antes de que se muestre la página. Page_Load está en algún lugar en el medio.

Hago cosas como esta todo el tiempo en el trabajo.

Protected Sub Page_PreRenderComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRenderComplete 
    Session("Value") = ddlList.SelectedValue 
End Sub 

Ese código probablemente no es correcto, pero solo le da una idea del evento.

1

¿Por qué no manejar el evento DataBinding de GridView y comprobar el valor en Session en ese controlador? Si no es igual al parámetro de la lista desplegable, puede cambiarlo y dejar que el enlace de datos siga su curso.

Consulte my answer here para obtener una muestra más general que cambie la SelectCommand del control Datasource. De la misma manera, debería poder cambiar el valor del Parámetro de Control.This answer hace lo mismo, pero para un repetidor (anidado).

Si esto no funciona, entonces la respuesta de Eoin sería la mejor (vuelva a vincular el GridView).

0

Gracias por ayudar a todos. Estaba a punto de seguir la sugerencia de Cerebrus, pero luego un colega me propuso una idea diferente. La línea comentada se reemplazó con la línea no comentada como se muestra a continuación.

 
<SelectParameters> 
    <%--<asp:Parameter Name="timevalue" Type="String" DefaultValue="now" />--%> 
    <asp:ControlParameter ControlID="timevalueDropDownList" PropertyName="SelectedValue" Name="timevalue" DefaultValue="now" /> 
</SelectParameters> 

Aparte de eso, todo en mi primera publicación se aplica. En la carga de página, verifiqué la sesión y apliqué los cambios a timevalueDropDownList como antes. La sesión siempre se actualizó en un evento SelectedIndexChanged, etc.

Pero como siempre, hay buenas ideas con las respuestas, y me aseguraré de referirme a ellas en cuestiones similares en el futuro. He tenido muchas de estas, pero acabo de encontrar otras formas de evitarlas, ahora es posible que no tenga que hacerlo. ;)

+0

Ver mi respuesta arriba ... usted debería poder llamar a Yo urGridview.DataBind() después de establecer programáticamente el valor de la lista desplegable –

+0

En realidad intenté enlazar datos justo después de configurar el valor de la sesión en el origen de datos, pero no funcionó. Fue lo primero que hice, creo. Para ser sincero, no estoy seguro si me di cuenta de poner la lista desplegable en autopostback = "true" antes de eso. Como dije, aprecio todas las respuestas y, como siempre, los voté a ustedes por eso. Cuando digo que revisaré este hilo en problemas similares en el futuro, LO SIGNO. Lo he hecho antes, todas las veces. Solo vengo aquí y pregunto cuándo vendrá un DL o estuve demasiado tiempo atrapado y de todos modos no puedo encontrar la respuesta por mi cuenta. ;) – Zan

0

Tuve un problema similar ... La solución de Kezzer funcionó para mí.

sólo hay que poner:

Chart1.databind() 

En el caso PreRenderComplete en su código subyacente.

Dado que PreRender completa se ejecuta como la última cosa antes de que se represente el gráfico, si "vincula" su tabla aquí, asegura que lo que se muestra "visualmente" en sus listas desplegables será de hecho lo que se usa como valores para renderizar tu gráfico.

Nuestro problema era con los menús desplegables en cascada de devolución automática. Teníamos listas desplegables de país, estado y ciudad. Si el usuario seleccionaba "Estados Unidos", "Ohio", "Clevland", todo funcionaba bien, pero si volvían a subir y cambiaban de país a "Francia", se producía un error en el gráfico, aunque los menús desplegables tenían ajustado para este cambio, y restablecer el estado y la ciudad a los primeros valores disponibles.

Adición de la AutoPostBack en PreRenderComplete obligaron a la tabla para "obtener: sus valores después de los menús desplegables habían sido corregido automáticamente ... impresionante

0

Otra forma, si todavía está buscando un puesto de volver a hacer una! response.redirect("~/ImOnThisPageAlready"); a la misma página.
bastante simple, no está seguro de lo ocupado es su sitio, pero funciona muy rápido para mi pequeña aplicación.

Cuestiones relacionadas