ACTUALIZACIÓN: Ahora es muy simple agregar atributos html a las plantillas de editor predeterminadas. Significa que en lugar de hacer esto:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
simplemente puede hacer esto:
@Html.EditorFor(m => m.userCode, new { htmlAttributes = new { @readonly="readonly" } })
Beneficios: Usted no tiene que llamar .TextBoxFor
etc para las plantillas. Simplemente llame al .EditorFor
.
Mientras @ solución de tiburón funciona correctamente y es simple y útil, mi solución (que yo uso siempre) es éste Crear editor-template
que pueden asas readonly
atributos:
- Crear una carpeta denominada
EditorTemplates
en ~/Views/Shared/
- Crear una navaja
PartialView
llamado String.cshtml
Llenar el String.cshtml
con este código:
@if(ViewData.ModelMetadata.IsReadOnly) {
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
new { @class = "text-box single-line readonly", @readonly = "readonly", disabled = "disabled" })
} else {
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue,
new { @class = "text-box single-line" })
}
En la clase de modelo, poner el atributo [ReadOnly(true)]
sobre las propiedades que desea ser readonly
.
e.g.
public class Model {
// [your-annotations-here]
public string EditablePropertyExample { get; set; }
// [your-annotations-here]
[ReadOnly(true)]
public string ReadOnlyPropertyExample { get; set; }
}
Ahora puede utilizar la sintaxis predeterminada de la maquinilla de afeitar simplemente:
@Html.EditorFor(m => m.EditablePropertyExample)
@Html.EditorFor(m => m.ReadOnlyPropertyExample)
La primera de ellas, hace que una normal de text-box
así:
<input class="text-box single-line" id="field-id" name="field-name" />
y el segundo, pagará a;
<input readonly="readonly" disabled="disabled" class="text-box single-line readonly" id="field-id" name="field-name" />
Se puede utilizar esta solución para cualquier tipo de datos (DateTime
, DateTimeOffset
, DataType.Text
, DataType.MultilineText
y así sucesivamente). Solo crea un editor-template
.
@Shyju Disculpa, me faltaba el prefijo '@' de la propiedad 'readonly'. Ver mi edición –
En el futuro, si obtiene algún tipo de error al agregar propiedades al argumento del objeto dinámico, puede prefijarlas con '@'. Por lo general, solo lo verá con palabras clave que coincidan con los atributos HTML (como readonly, clase, etc.) –
@BradChristie: No; solo necesita un '@' para usar atributos que coincidan con las palabras clave ** C# **. – SLaks