Esperemos que una pregunta fácil para usted asp.net mvc gurús:

Tengo una casilla de verificación, creado como este:

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

En mi acción estoy comprobando el valor así:

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

Espero que esta devolver true, como se comprueba. Sin embargo, el elemento oculto que se ha creado tiene un valor falso:

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

Primero, hay una manera de hacer HtmlHelper se comportan como espero que se debe? O manualmente la construcción de la entrada/crear mi propio método auxiliar de la única manera? (no es que esta es una gran cosa…)

Segundo, ¿alguien puede arrojar algo de luz sobre por qué las casillas de verificación se comportan de esta manera? Estoy incorrecta en el supuesto de discapacidad casilla de verificación que está marcada deberían == true? Hace un estado deshabilitado semánticamente significa falso?

InformationsquelleAutor elwyn | 2011-01-17

4 Comentarios

  1. 33

    Un campo de entrada marcada con el disabled="disabled" atributo NUNCA envía su valor para el servidor. Si quieres lograr esto, usted podría utilizar el readonly="readonly" atributo que todavía impide que el usuario modifique el valor, sino que se envía el valor existente cuando el formulario es enviado.

    • +1: he encontrado esto de la manera difícil, que no se que hace mucho tiempo como yo también soy un principiante en MVC. Sin embargo, ¿tienes una buena sugerencia, si es un campo de entrada y quiero hacer discapacitados/readonly? En la actualidad la configuración de «readonly» NO gris el campo de entrada como lo hace para los «discapacitados».
    • sí que sucede con FireFox y casillas de verificación. Soluciones comunes implican disabled con un respaldo campo oculto.
    • Gracias, no sabía que. Me fui con una costumbre HtmlHelper que utiliza la ‘movilidad’ de atributo y representa un campo oculto.
    • podría usted por favor enviar muestra de su trabajo a su alrededor cuando usted consigue una oportunidad? Me gustaría mantener durante una referencia sobre esta cuestión. Gracias!
    • Siento la extensión del método que he hecho es escrito por una situación muy específica (que no es solo una Casilla de verificación ayudante), el problema que se me dio en la OP es una simplificado caso. Lo que escribí no ser de mucha utilidad a alguien más…
    • He intentado ‘readonly’ con checbox. No hay ningún efecto si puedo hacer es de sólo lectura.
    • entonces probablemente usted tiene algún otro problema.
    • atributo no funciona en las casillas de verificación en general.
    • Acabé en torno a que mediante el uso de IValidatable para realizar la validación si el usuario no seleccione las opciones que yo quería que ellos

  2. 2

    1) Desde mi punto de vista no hay manera de cambiar el comportamiento del Html.Casilla de verificación método. Tuve que enfrentar el problema de hace tiempo y que terminó con manualmente la construcción de la casilla entrada como usted sugiere. Para la construcción de la entrada de la casilla de verificación no está siempre en el infierno como el uso de los métodos auxiliares no es siempre el eaven. Por supuesto biulding su propio método auxiliar puede ser la elección correcta.

    2) Movilidad campo de entrada no se registra cuando el formulario es enviado;
    yo esperaría que el mismo, debe enviar movilidad de entrada de casilla de verificación de campo, si está marcado o no.

    Podemos discutir sobre la elección adoped a relé de entrada campo oculto para empujar en la solicitud la casilla de verificación, cuando la casilla de verificación no está seleccionada. El efecto secundario de esta elección es que vamos a encontrar en la casilla de verificación nombre entre la publicación de los datos, incluso si la casilla de verificación deshabilitar en desacuerdo con lo mencionado anteriormente que es: deshabilitado campo de entrada no se registra cuando el formulario es enviado

  3. 2

    No sé si se resuelve el problema, pero esta fue la solución para mí:

    Mi modelo tiene un UserMigrated propiedad booleana, una vez que el usuario ha programados para migrar, él no puede volver atrás, por lo que la vista se convierte en:

    @if (Model.UserMigrated)
        {
        <td>@Html.CheckBox("chkBoxReadOnly", true, new {disabled = "disabled"})</td>
            @Html.HiddenFor(m => m.UserMigrated)
        }
    else
        {
        <td>@Html.CheckBoxFor(m => m.UserMigrated)</td>
        }
  4. 0

    Me enfrenté a un problema similar, cuando tratando de uso de la movilidad para una casilla de verificación.
    Mi solución fue simplemente para que no aparezca la casilla de verificación ya que el usuario no tiene acceso a modificar el campo.

    También me aseguré de que el Html.HiddenFor estaba allí, por lo que el valor se mantuvo.

    • Sí, no estoy seguro de lo que es un punto de movilidad controlada, que debería haber sido la etiqueta, o simplemente no se muestra. no hay punto en la visualización de un control donde no se utilizan, o no puede ser utilizado para cualquier cosa excepto para mostrar la información.

Dejar respuesta

Please enter your comment!
Please enter your name here