Pregunta

Tengo un control personalizado que hereda de la clase CompositeControl de .NET. Este control anula las CreateChildControls con el fin de construir dinámicamente sus controles secundarios. Necesito la página a la parte posterior del poste después de un par diferentes eventos de JavaScript se producen en el lado del cliente.

Con el fin de lograr esto, puedo crear dos controles ocultos en la página para que pueda establecer sus valores con javascript, enviar la página, y leer los valores de salida en el lado del servidor. He aquí está el código que utilizo para crear estos dos hiddens:

Protected Overrides Sub CreateChildControls()
    hdEventName = New HiddenField()
    Controls.Add(hdEventName)
    hdEventName.ID = "hdEventName"
    hdEventArgs = New HiddenField()
    Controls.Add(hdEventArgs)
    hdEventArgs.ID = "hdEventValue"
    ' other controls
    ' ...
End Sub

Cuando se produce un evento de JavaScript que establece el atributo valor de las dos hiddens y enviar la página, así:

hdEventName.value = 'EventName';
hdEventArgs.value = 'arg1,arg2';
document.forms[0].submit();

En el método OnLoad de mi control, intento para comprobar la propiedad Value de los controles hdEventName y hdEventArgs, pero siempre está vacía. Sin embargo, Page.Request.Form (hdEventName.UniqueID) y Page.Request.Form (hdEventArgs.UniqueID) devuelven valores correctos. El HTML real en el marcado también muestra valores correctos después de que los mensajes última página.

¿Por qué es la propiedad Value de los HtmlInputHiddens desconectados del valor real que aparece en el cliente?

Actualizar Parece que las propiedades de un control se cargan desde la forma en algún momento después de que ocurra OnLoad. De este modo pude resolver mi problema, ya sea moviendo el código que comprueba los dos campos ocultos en el método OnPreRender, o añadir el siguiente método para mi código -

Private Sub Event_Handler(ByVal sender As Object, ByVal e As EventArgs)
                                          Handles hdEventName.ValueChanged
    ' do stuff with hiddens
    ' ...

    ' reset the values back
    hdEventName.Value = String.Empty
    hdEventArgs.Value = String.Empty
End Sub
¿Fue útil?

Solución 2

Parece que las propiedades de un control se cargan desde la forma en algún momento después de que ocurra OnLoad. De este modo pude resolver mi problema, ya sea moviendo el código que comprueba los dos campos ocultos en el método OnPreRender, o añadir el siguiente método para mi código -

Private Sub Event_Handler(ByVal sender As Object, ByVal e As EventArgs)
                                      Handles hdEventName.ValueChanged
    ' do stuff with hiddens
    ' ...

    ' reset the values back
    hdEventName.Value = String.Empty
    hdEventArgs.Value = String.Empty
End Sub

Otros consejos

cuando la página Volver No hay nada para vincular la variable hdEventName al control que ha creado anteriormente. lo que está haciendo es similar a tener un número entero declarado a nivel de clase y se establece a 5 cuando va a crear los controles secundarios. no hay nada para mantener ese valor en esa variable a través de las devoluciones de datos.

Si desea obtener una referencia al control que ha creado anteriormente, habría que utilizar

hdEventName = CType(Page.FindControl("hdEventName") , HiddenField)

(supongo que en esto) o Solicitud si estás sólo se preocupa por el valor.

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