Comment créer une zone de texte en lecture seule dans ASP.NET MVC3, avec le moteur de vue Razor? Y a-t-il une méthode HTMLHelper disponible pour cela?
Quelque chose comme ça ?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
Nous vous invitons à créer un assistant HTML pour cela, mais il s’agit simplement d’un atsortingbut HTML comme un autre. Voulez-vous créer une aide HTML pour une zone de texte ayant d’autres atsortingbuts?
MISE À JOUR: Maintenant, il est très simple d’append des atsortingbuts HTML aux modèles d’éditeur par défaut. Moyens au lieu de faire ceci:
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
vous pouvez simplement faire ceci:
@Html.EditorFor(m => m.userCode, new { htmlAtsortingbutes = new { @readonly="readonly" } })
Avantages: Vous n’avez pas à appeler .TextBoxFor
etc. pour les modèles. Appelez simplement .EditorFor
.
Bien que la solution de @ Shark fonctionne correctement et soit simple et utile, ma solution (que j’utilise toujours) est celle-ci: Créez un editor-template
capable de gérer l’atsortingbut readonly
:
EditorTemplates
dans ~/Views/Shared/
PartialView
nommé Ssortingng.cshtml
Remplissez le Ssortingng.cshtml
avec ce code:
@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" }) }
Dans la classe de modèle, placez l’atsortingbut [ReadOnly(true)]
sur les propriétés que vous souhaitez utiliser en readonly
.
par exemple
public class Model { // [your-annotations-here] public ssortingng EditablePropertyExample { get; set; } // [your-annotations-here] [ReadOnly(true)] public ssortingng ReadOnlyPropertyExample { get; set; } }
Maintenant, vous pouvez simplement utiliser la syntaxe par défaut de Razor:
@Html.EditorFor(m => m.EditablePropertyExample) @Html.EditorFor(m => m.ReadOnlyPropertyExample)
Le premier rend une zone de text-box
normale comme ceci:
et le second rendra à;
Vous pouvez utiliser cette solution pour tout type de données ( DateTime
, DateTimeOffset
, DataType.Text
, DataType.MultilineText
, etc.). Créez simplement un editor-template
.
La solution avec TextBoxFor est OK, mais si vous ne voulez pas voir le champ comme EditBox, il peut y avoir des modifications comme suit:
1. Code de razor avant les modifications
@Html.EditorFor(model => model.Text) @Html.ValidationMessageFor(model => model.Text)
2. Après les modifications
@Html.DisplayFor(model => model.Text) @Html.HiddenFor(model => model.Text) @Html.ValidationMessageFor(model => model.Text)
Généralement, cette solution désactive le classement par rapport à l’édition mais en montre la valeur. Aucune modification de code-behind n’est nécessaire.
avec des crédits à la réponse précédente de @Bronek et @Shimmy
C’est ce que j’ai fait dans ASP.NET Core
La première entrée est en lecture seule et la seconde transmet la valeur à Controller et est masquée. Espérons que cela sera utile pour quelqu’un qui travaille avec ASP.Net Core.
@Html.TextBox("Recivers", Model, new { @class = "form-control", style = "width: 300px", @readonly = "readonly" })
@Html.TextBoxFor(model => model.IsActive, new { readonly= "readonly" })
C’est très bien pour la zone de texte. Cependant, si vous essayez de faire la même chose pour la checkbox
essayez de l’utiliser si vous l’utilisez
@Html.CheckBoxFor(model => model.IsActive, new { onclick = "return false" })
Mais n’utilisez pas la disable
car la désactivation envoie toujours la valeur par défaut false au serveur, que ce soit en mode coché ou non vérifié. Et le readonly
ne fonctionne pas pour la case à cocher et le radio button
. readonly
ne fonctionne que pour les champs de text
.
Vous pouvez utiliser le code ci-dessous pour créer une zone de texte en lecture seule.
Méthode -1
@Html.TextBoxFor(model => model.Fields[i].TheField, new { @readonly = true })
Méthode -2
@Html.TextBoxFor(model => model.Fields[i].TheField, new { htmlAtsortingbutes = new {disabled = "disabled"}})