type ejemplos javascript asp.net hidden-field

ejemplos - javascript get value hidden field



El campo oculto de asp.net no conserva valor cuando se actualiza desde el código que está detrás (2)

Estoy usando un campo oculto para almacenar un valor en una página asp.net. Básicamente, establezco el valor del campo oculto cada vez que se cambia un valor en el formulario, es decir, el nombre, la fecha, etc. El campo está en un formulario web que tiene una página maestra y se encuentra en la sección de contenido:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <asp:HiddenField ID="hdnDirtyFlag" runat="server" Value=''false'' />

Cambio el valor del campo en javascript llamando a una función cada vez que se desencadena un evento onchange en otros controles en el formulario web:

<asp:TextBox CssClass="niceInput" ID="tbFirstName" runat="server" MaxLength="40" Width="150" onchange=''SetHiddenVariable();''></asp:TextBox> <script type="text/javascript"> function SetHiddenVariable() { // Set the value of the hidden variable so we know a field has been updated var hiddenControl = ''<%= hdnDirtyFlag.ClientID %>''; document.getElementById(hiddenControl).value = ''true''; } </script>

Hasta ahora tan bueno. Cuando la página carga, el valor del campo oculto es "falso" y, si no cambio ningún valor en el formulario web, permanece falso. Cada vez que cambio otro control, se llama a la función javascript y el valor del campo oculto se actualiza a "verdadero". De nuevo, todo está bien.

Después de enviar el formulario y actualizar la base de datos, establezco el valor del campo oculto en ''falso'' en el código que se encuentra detrás:

hdnDirtyFlag.Value = "false";

Pero cuando hago clic en otro botón y hago una devolución, el valor del campo oculto sigue siendo "verdadero".

¿Alguien puede explicar por qué esto es? Pasé por el código que había detrás e inmediatamente después de cambiar el valor, puedo ver que el valor es "falso". Hay un asp: UpdatePanel en la página pero el campo oculto no es parte de este panel.

EDITAR:

Este es el código que utilizo para verificar el valor del campo en el código detrás de la segunda devolución de datos, después de que se haya establecido en falso en el último paso de la primera devolución de datos. El valor permanece en true por alguna razón en la segunda devolución de datos, después de que se haya establecido en true en javascript en el lado del cliente y luego se haya establecido en false en el código de atrás, como se muestra arriba:

if (hdnDirtyFlag.Value == "true") { UpdateSecurityObject(); }


Su problema es que su campo oculto está fuera del panel de actualización. Aunque un panel de actualización tiene acceso a todos los controles en una página durante la devolución (ya que actúa como una devolución normal), NO actualiza ningún control en el lado del cliente de la página que esté fuera de la Plantilla de Contenido. Entonces, su código en el código que está cambiando el valor del campo oculto no está afectando el valor en el lado del cliente. Es por eso que la segunda vez que hace clic en el botón, todavía está configurado como verdadero.

Deberá: a) colocar el campo oculto dentro de UpdatePanel (o podría colocarlo en su propio panel con UpdateMode configurado como Siempre); o b) tiene algún javascript en el lado del cliente que se activa cuando finaliza la llamada a UpdatePanel que establece el valor de nuevo en falso.


ViewState mantiene el valor, por lo que cuando la página se vuelve a cargar, ViewState tiene verdadero, así que asp.net actualiza el valor del control con verdadero antes de que se muestre la página.

Cambia tu campo oculto a esto:

<asp:HiddenField ID="hdnDirtyFlag" runat="server" Value=''false'' EnableViewState="false" />

Esto evitará que asp.net mantenga el valor de este campo en todas las devoluciones de datos, ya que su intención es establecerlo en falso cada vez que se carga la página.