2010-05-18 29 views
13

Estoy usando el helper Html.DropDownList en ASP.NET MVC y me gustaría hacerlo de solo lectura. Desafortunadamente, también necesito que presente su valor en una publicación de formulario.Haciendo una lista desplegable de solo lectura pero aún presentando su valor

He encontrado (a través de similar question on SO) que usar el siguiente formato hará que el menú desplegable sea de solo lectura pero no proporcionará acceso al valor del control dentro del controlador.

Html.DropDownList("Types", Model.Types, new { @disabled = "disabled" }) 

¿Alguien sabe cómo hacer una lista desplegable de sólo lectura o discapacitados con ASP.NET MVC mientras que también permite que presentara con un poste de la forma?

+0

Es realmente extraño: Hemos estado utilizando el código que incluya en su pregunta, y ha funcionado bien para nosotros hasta esta semana. Sospecho que la actualización de MVC 3 o las características de validación del lado del cliente que agregamos recientemente. – StriplingWarrior

Respuesta

19

Comportamiento previsto en el navegador web: un control deshabilitado no publicará sus datos en el servidor cuando se envíe un formulario.

Puede falsificarlo colocando un campo oculto en la página con el valor; solo asegúrese de validar los datos. O use javascript para habilitar el campo antes de que suceda la acción de envío.

Si está deshabilitando un campo, pero todavía lo muestra en la página con algún valor, entonces debe haber una forma de que usted sepa ese valor sin tener que devolverlo del navegador al servidor.

+2

Una gran respuesta. –

+0

@Prescott buena respuesta – User

7
  1. En cambio, conviértalo en un cuadro de texto.
  2. Añadir un evento de cambio con JavaScript:

    $('#dropdown').change(function(e) { e.preventDefault(); });

  3. tener una lista desplegable con sólo 1 artículo en él.

  4. Tenga un elemento oculto con el valor real del menú desplegable, de modo que se envíe incluso si el menú desplegable deshabilitado no lo incluye.
10

Puede habilitarlo en el envío. Desventaja: se ve raro.

$(form).submit(function() { 
    $('#Types').removeAttr('disabled'); 
}); 

o copia el valor en un campo oculto en el envío.

$(form).submit(function() { 
    $('#HiddenField').val($('#Types').val()); 
}); 
1

Simplemente modifique la hoja de estilo de ese elemento.

visibility:"visible" 
visibility:"hidden" 

Para obtener más información, consulte http://support.microsoft.com/kb/199243.

Obtendrá la devolución de datos pero tampoco la verá más.

0

Creo que la mejor solución es ponerlo a través de

$.post(url, 
{ 
    AID: val1, 
    CID: val2 
}, 
    function (data) { 
    // act on model 
    } 
); 
Cuestiones relacionadas