Comment créer une zone de texte en lecture seule dans ASP.NET MVC3 avec le moteur de vue Razor?
Existe-t-il une méthode HTMLHelper disponible pour cela?
Quelque chose comme ce qui suit?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
Comment créer une zone de texte en lecture seule dans ASP.NET MVC3 avec le moteur de vue Razor?
Existe-t-il une méthode HTMLHelper disponible pour cela?
Quelque chose comme ce qui suit?
@Html.ReadOnlyTextBoxFor(m => m.userCode)
@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly" })
Vous êtes invités à créer un HTML Helper pour cela, mais il ne s'agit que d'un attribut HTML comme les autres. Feriez-vous un HTML Helper pour une zone de texte qui a d'autres attributs?
@
préfixe de lareadonly
propriété. Voir ma modification.@
. Vous ne le verrez généralement qu'avec des mots clés qui correspondent aux attributs HTML (comme lecture seule, classe, etc.)@
pour utiliser les attributs qui correspondent aux mots clés C # .@Html.TextBoxFor(m => m.userCode, new { @readonly="readonly", @class="form-control" })
MISE À JOUR: Il est maintenant très simple d'ajouter des attributs HTML aux modèles d'éditeur par défaut. Cela signifie au lieu de faire ceci:
vous pouvez simplement faire ceci:
Avantages: vous n'avez pas besoin d'appeler
.TextBoxFor
, etc. pour les modèles. Appelez.EditorFor
.Bien que la solution de @ Shark fonctionne correctement, et qu'elle soit simple et utile, ma solution (que j'utilise toujours) est celle-ci: créer un attribut
editor-template
qui peut gérerreadonly
:EditorTemplates
dans~/Views/Shared/
PartialView
nomméString.cshtml
Remplissez le
String.cshtml
avec ce code:Dans la classe de modèle, placez l'
[ReadOnly(true)]
attribut sur les propriétés que vous souhaitez êtrereadonly
.Par exemple,
Vous pouvez maintenant utiliser la syntaxe par défaut de Razor simplement:
Le premier rend un normal
text-box
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 fichiereditor-template
.la source
La solution avec TextBoxFor est OK, mais si vous ne voulez pas voir le champ comme EditBox élégant (cela peut être un peu déroutant pour l'utilisateur), impliquez les modifications suivantes:
Code Razor avant les modifications
Après les changements
En général, cette solution empêche la modification du champ, mais en montre la valeur. Il n'est pas nécessaire de modifier le code-behind.
la source
Avec les crédits à la réponse précédente de @Bronek et @Shimmy:
C'est comme si j'avais fait la même chose dans ASP.NET Core:
La première entrée est en lecture seule et la seconde transmet la valeur au contrôleur et est masquée. J'espère que cela sera utile pour quelqu'un qui travaille avec ASP.NET Core.
la source
la source
C'est très bien pour la zone de texte. Cependant, si vous essayez de faire de même pour le,
checkbox
essayez de l'utiliser si vous l'utilisez:Mais ne l'utilisez pas
disable
, car disable envoie toujours la valeur par défautfalse
au serveur - qu'il soit à l'état coché ou non coché. Et lereadonly
ne fonctionne pas pour la case à cocher etradio button
.readonly
ne fonctionne que pour lestext
champs.la source
Vous pouvez utiliser le code ci-dessous pour créer une zone de texte en lecture seule.
Méthode 1
Méthode 2
la source