2011-01-17 18 views
26

Con suerte una pregunta fácil para usted ASP.NET MVC gurús:Html.Checkbox devuelve falso si es discapacitado, aunque seleced

tengo una casilla de verificación, creado de esta manera:

<%=Html.CheckBox("MyCheckBox", true, new { disabled = "disabled"})%> 

En mi acción me Estoy comprobando el valor como sigue:

bool isChecked = form["MyCheckBox"].Contains("true"); 

Espero que esto se cumple, ya que está marcada. Sin embargo, el elemento oculto que se crea tiene un valor falso:

<input checked="checked" disabled="disabled" id="MyCheckBox" name="MyCheckBox" type="checkbox" value="true" /> 
<input name="MyCheckBox" type="hidden" value="false" /> 

En primer lugar, hay una manera de hacer que el HtmlHelper se comportan como espero que lo que debería? ¿O está construyendo manualmente la entrada/creando mi propio método de ayuda de la única manera? (no es que esto sea un gran problema ...)

En segundo lugar, ¿alguien puede arrojar algo de luz sobre por qué las casillas de verificación se comportan de esta manera? ¿Soy incorrecto al asumir que una casilla de verificación desactivada que está marcada debe == cierto? ¿Significa semánticamente un estado desactivado falso?

+0

Encontrado solución aquí: [cómo enviar/Enviar una casilla de verificación de entrada que está deshabilitada?] (http://stackoverflow.com/questions/4727974/how-to-post-submit-an-input-checkbox-that-is-disabled) –

Respuesta

31

Un campo de entrada marcado con el atributo disabled="disabled"NUNCA envía su valor al servidor. Si desea lograr esto, puede usar el atributo readonly="readonly" que aún impide que el usuario modifique el valor, pero envía el valor existente cuando se envía el formulario.

+2

+1: Descubrí esto por las malas, no hace mucho tiempo, ya que también soy un principiante en MVC. Sin embargo, ¿tiene una buena sugerencia si es un campo de entrada y quiero desactivarlo/solo leerlo? Actualmente la configuración de "solo lectura" NO gris el campo de entrada como lo hace para el "deshabilitado". – VoodooChild

+4

@VoodooChild, sí, eso sucede con Firefox y casillas de verificación. Las soluciones comunes implican 'disabled' con un campo oculto de respaldo. –

+1

Gracias, no lo sabía. Fui con un HtmlHelper personalizado que utiliza el atributo 'disabled' y representa un campo oculto. – elwyn

2

1) Desde mi punto de vista no hay forma de cambiar el comportamiento del método Html.CheckBox. Tuve que enfrentar el problema hace tiempo y terminé construyendo manualmente la casilla de entrada como sugieres. Para construir la casilla de verificación de entrada no siempre es el infierno ya que el uso de los métodos de ayuda no siempre es el oído. Por supuesto, biulding su propio método de ayuda puede ser la elección correcta.

2) El campo de entrada deshabilitada no se publica cuando se envía el formulario; esperaría lo mismo, enviando fileds de casilla de entrada inhabilitados, estén o no marcados.

Podemos discutir acerca de la opción que MVC asignó al retransmisión en el campo oculto de entrada para ingresar en la solicitud la casilla de verificación, cuando la casilla de verificación no está seleccionada. El efecto secundario de esta opción es que encontraremos el nombre de casilla de verificación entre los datos publicados aunque la casilla de verificación esté deshabilitada en desacuerdo con lo indicado anteriormente: el campo de entrada deshabilitado no se publica cuando se envía el formulario

Cuestiones relacionadas