Puis-je définir la zone de texte en lecture seule lorsque vous utilisez Html.TextBoxFor?

J’ai la balise suivante avec une expression Html.TextBoxFor et je veux que le contenu soit en lecture seule, est-ce possible?

 Model.Events.Subscribed[i].Action)%> 

Mise à jour pour les versions modernes de la suggestion de .NET per @ 1c1cle dans un commentaire:

 <%= Html.TextBoxFor(model => Model.SomeFieldName, new {{"readonly", "true"}}) %> 

Réalisez que ce n’est pas un moyen “sécurisé” de faire cela car quelqu’un peut injecter du javascript pour changer cela.

Il faut savoir que si vous définissez cette valeur sur false , vous ne verrez aucun changement de comportement! Donc, si vous devez piloter cela en fonction d’une variable, vous ne pouvez pas simplement twigr cette variable. Au lieu de cela, vous devez utiliser une logique conditionnelle pour ne pas transmettre cet atsortingbut readonly .

Voici une suggestion non testée sur la façon de procéder (s’il y a un problème avec cela, vous pouvez toujours faire si / sinon):

 <%= Html.TextBoxFor(model => Model.SomeFieldName, shouldBeReadOnlyBoolean ? new {{"readonly", "true"}} : null) %> 
 <%= Html.TextBoxFor(m => Model.Events.Subscribed[i].Action, new { @readonly = true })%> 

Utilisez le suivant:

  @Html.TextBoxFor(m => m.Whatever, new {@readonly = "readonly"}) 

Si vous voulez lui assigner une classe, vous pouvez le faire de la même façon en ajoutant la propriété @class = “”. J’espère que cela t’aides 🙂

Pour le rendre en lecture seule

 @Html.TextBoxFor(m=> m.Total, new {@class ="form-control", @readonly="true"}) 

À diable

 @Html.TextBoxFor(m=> m.Total, new {@class ="form-control", @disabled="true"}) 
 <%= Html.TextBoxFor(m => Model.Events.Subscribed[i].Action, new {readonly=true})%> 

L’extrait suivant a fonctionné pour moi.

 @Html.TextBoxFor(m => m.Crown, new { id = "", @style = "padding-left:5px", @readonly = "true" }) 
 <%: Html.TextBoxFor(m => Model.Events.Subscribed[i].Action, new { @autocomplete = "off", @readonly=true})%> 

Voici comment vous définissez plusieurs propriétés

Ce travail pour moi …

 @Html.TextBoxFor(model => model.RIF, new { value = @Model.RIF, @readonly = "readonly" }) 

En utilisant l’exemple de @Hunter, dans la nouvelle partie {..}, ajoutez readonly = true, je pense que cela fonctionnera.

Une autre possibilité :

 <%= Html.TextBoxFor(model => Model.SomeFieldName, new Dictionary(){{"disabled", "true"}}) %> 

En fait, la réponse de Brain Mains est presque correcte:

 @Html.TextBoxFor(model => model.RIF, new { value = @Model.RIF, @readonly = true }) 

Dans le cas où vous devez appliquer votre classe personnalisée, vous pouvez utiliser

  @Html.TextBoxFor(m => m.Birthday, new Dictionary() { {"readonly", "true"}, {"class", "commonField"} } ) 

Où sont

commonField est la classe CSS

et Birthday pourrait être un champ de chaîne que vous pouvez probablement utiliser pour conserver la date jQuery Datapicker 🙂

  

C’est un exemple concret.

En définissant l’atsortingbut readonly sur true ou false, cela ne fonctionnera pas dans la plupart des navigateurs. Je l’ai fait comme ci-dessous, lorsque le mode de la page est “reload”, je n’ai pas inclus l’atsortingbut “readonly”.

 @if(Model.Mode.Equals("edit")){ @Html.TextAreaFor(model => Model.Content.Data, new { id = "modEditor", @readonly = moduleEditModel.Content.ReadOnly, @style = "width:99%; height:360px;" }) } @if (Model.Mode.Equals("reload")){ @Html.TextAreaFor(model => Model.Content.Data, new { id = "modEditor", @style = "width:99%; height:360px;" })} 
  @Html.TextBoxFor(model => model.IdUsuario, new { @Value = "" + User.Identity.GetUserId() + "", @disabled = "true" }) @disabled = "true" 

Très bien travailler