2011-02-14 16 views
13

Tengo dos botones de opción que están desactivados con javascript cuando se carga la página. RadioButton1 está marcado por defecto. Cuando hago clic en el botón para hacer una devolución de datos, el RadioButton1 ya no está marcado.Botón de opción desactivado perdiendo valor después de la devolución de datos

¿Alguien sabe por qué?

Aquí está mi ejemplo de código. El código detrás está vacío.

<asp:RadioButton ID="RadioButton1" runat="server" GroupName="group" Checked="true"/> 
<asp:RadioButton ID="RadioButton2" runat="server" GroupName="group" /> 
<asp:Button ID="Button1" runat="server" Text="Button"></asp:Button> 
<script type="text/javascript"> 
    window.onload = function() { 
     var RadioButton1 = document.getElementById('<%= RadioButton1.ClientID %>'); 
     var RadioButton2 = document.getElementById('<%= RadioButton2.ClientID %>'); 

     RadioButton1.disabled = true; 
     RadioButton2.disabled = true; 
    }; 
</script> 
+0

posible duplicado de [Deshabilitar una casilla de verificación en javascript y reconocerlo como comprobado en el lado del servidor] (http://stackoverflow.com/questions/2462956/disable-a-checkbox-in-javascript-and-recognize-it -as-checked-on-the-server-side) –

Respuesta

12

Esto es un comportamiento de HTML, no de ASP.NET. Una vez que marque el elemento de entrada como deshabilitado, ya no se publicará en la solicitud. Para los campos de texto esto se puede evitar usando Readonly insted de Disabled pero creo que no funciona para las casillas de verificación o botones de opción. Si aún desea publicar el valor, debe enviarlo en un campo oculto relacionado con el botón de opción y procesarlo manualmente en el servidor.

Editar:

Here se puede leer sobre elementos deshabilitados y de sólo lectura y sobre el envío de formularios:

control deshabilitado:

control deshabilitado no puede ser exitoso.

de sólo lectura de control:

de sólo lectura elementos pueden tener éxito.

presentación Forma:

Un control exitoso es válida para presentación. Cada control exitoso tiene su nombre de control emparejado con su valor actual como parte del conjunto de datos de formulario presentado. Un control exitoso debe definirse dentro de un elemento de formulario y debe tener un nombre de control.

Sin embargo:

  • Los controles que son discapacitado no puede tener éxito.
+0

Gracias, eso explica mi problema. ¿Sabes por qué fue hecho así? –

4

Esto se debe a discapacitados <input> elementos no envían ningún valor al servidor de devolución de datos, y los botones de radio no almacenan su estado de activación en ViewState, por lo que no se pueden conservar de esa manera tampoco.

Dado que RadioButton1 y RadioButton2 están deshabilitados, su nombre (group) no formará parte de la devolución de datos, y ASP.NET los eliminará como resultado.

4

Trate de hacer a obtener el atributo readonly="readonly" lugar. Una entrada deshabilitada no publicará un valor.

http://www.w3schools.com/tags/att_input_readonly.asp

+0

El problema es que el enlace dice que el atributo de solo lectura se puede usar solo para entradas de tipo texto y contraseña. –

+0

Justo lo suficiente, recientemente utilicé de manera solo lectura pero fue para un cuadro de texto. No sabía que esto no se aplicaba a todas las entradas. – CRice

2

Si los elementos con discapacidad que lo hacen no se enviarán a la devolución de datos.Antes de hacer una devolución de datos, primero debe habilitarlos. Ejemplo de jQuery:

$('#<%= Button1.ClientID %>').click(function() { RadioButton1.disabled = false; 
                RadioButton2.disabled = false; }); 
+0

Gran solución. ¡Gracias! –

0

O cuando la generación de los discapacitados casilla/botón de radio a nivel de servidor, también generará un <input type='hidden' .. etiqueta para el mismo nombre. Eso publicará tu valor en.

Cuestiones relacionadas