¿Cómo creo un cuadro de texto de solo lectura en ASP.NET MVC3 con el motor de vista Razor?
¿Hay un método HTMLHelper disponible para hacer eso?
¿Algo parecido a lo siguiente?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
¿Cómo creo un cuadro de texto de solo lectura en ASP.NET MVC3 con el motor de vista Razor?
¿Hay un método HTMLHelper disponible para hacer eso?
¿Algo parecido a lo siguiente?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
Puede crear un HTML Helper para esto, pero esto es simplemente un atributo HTML como cualquier otro. ¿Haría un ayudante HTML para un cuadro de texto que tiene otros atributos?
@
prefijo de lareadonly
propiedad. Ver mi edición.@
. Por lo general, solo lo verá con palabras clave que coincidan con atributos HTML (como solo lectura, clase, etc.)@
usar atributos que coincidan con las palabras clave de C # .@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly", @class="form-control" })
ACTUALIZACIÓN: Ahora es muy sencillo agregar atributos HTML a las plantillas de editor predeterminadas. Neans en lugar de hacer esto:
simplemente puedes hacer esto:
Beneficios: no tienes que llamar
.TextBoxFor
, etc. para obtener plantillas. Solo llama.EditorFor
.Si bien la solución de @ Shark funciona correctamente, y es simple y útil, mi solución (que uso siempre) es esta: Crear un atributo
editor-template
que pueda manejarreadonly
:EditorTemplates
en~/Views/Shared/
PartialView
llamadaString.cshtml
Complete el
String.cshtml
con este código:En la clase de modelo, coloque el
[ReadOnly(true)]
atributo en las propiedades que desea serreadonly
.Por ejemplo,
Ahora puede usar la sintaxis predeterminada de Razor simplemente:
El primero hace un normal
text-box
como este:Y el segundo rendirá a;
Se puede utilizar esta solución para cualquier tipo de datos (
DateTime
,DateTimeOffset
,DataType.Text
,DataType.MultilineText
etc.). Simplemente cree uneditor-template
.fuente
La solución con TextBoxFor está bien, pero si no desea ver el campo como EditBox con estilo (puede ser un poco confuso para el usuario), incluya los siguientes cambios:
Código Razor antes de cambios
Después de los cambios
Generalmente, esta solución evita que el campo se edite, pero muestra su valor. No es necesario realizar modificaciones de código subyacente.
fuente
Con créditos a la respuesta anterior de @Bronek y @Shimmy:
Esto es como si hubiera hecho lo mismo en ASP.NET Core:
La primera entrada es de solo lectura y la segunda pasa el valor al controlador y está oculta. Espero que sea útil para alguien que trabaje con ASP.NET Core.
fuente
fuente
Esto está bien para el cuadro de texto. Sin embargo, si intenta hacer lo mismo para el
checkbox
, intente usar esto si lo está usando:Pero no lo use
disable
, porque deshabilitar siempre envía el valor predeterminadofalse
al servidor, ya sea en el estado marcado o no marcado. Yreadonly
no funciona para la casilla de verificación yradio button
.readonly
solo funciona paratext
campos.fuente
Puede usar el siguiente código para crear un TextBox como de solo lectura.
Método 1
Método 2
fuente