8
votes

Comment définir l'attribut désactivé sur la zone de texte HTML dans ASP.NET-MVC?

J'essaie de définir dynamiquement l'attribut désactivé sur la zone de texte HTML et d'avoir des problèmes

J'ai essayé cela à mon avis: p>

 string disabledString = "";
 if (SomeLogic)
 {
      disabledString = "disabled";
 }

 Html.Textbox()...new Dictionary<string, object> { { "maxlength", 50 }, { "disabled", readOnlyState } })%>


5 commentaires

La spécification HTML dit de désactiver s'il voit un attribut «désactivé» (avec n'importe quelle valeur) dans l'élément. Voir ma solution de contournement ci-dessous.


J'espère que vous ne dépendez-vous pas que l'attribut désactivé pour empêcher les données d'être modifiées? Un peu de modification de formulaire leur permettrait de changer une valeur "à la mode" si vos liaisons le permettent.


@Nathan Taylor - Pouvez-vous clarifier ce que vous voulez dire ici?


Eh bien, si vous dites à MVC de lier une propriété comme "Titre" à un niveau de code, mais "Désactiver" la propriété à l'aide de l'attribut désactivé, l'utilisateur pourrait toujours faire une demande de formulaire avec une valeur attribuée au titre en faisant circuler l'attribut désactivé.


D'accord avec @nathan, mais cela dépend du type d'application que vous créez. Pour une application intranet, c'est probablement bien. Pour créer une application Internet balayeuse, je ne compterais que sur l'attribut désactivé pour décourager l'entrée de l'avant, mais vérifiez toujours le champ à l'arrière pour vous assurer qu'il ne changeait pas.


3 Réponses :


1
votes

Je pense que vous souhaitez omettre l'attribut désactivé tout à fait lorsque vous souhaitez que cela soit activé. Les navigateurs plus anciens examineraient les éléments suivants et désactiveraient les zones de texte: xxx

en d'autres termes dans l'ancien HTML, le = "désactivé" n'était pas nécessaire pour des raisons de compatibilité, vous devez simplement omettre l'attribut si vous veux que cela rendit bien. Je ne sais pas ce qui se passe si vous essayez un doctype strict, cependant.


1 commentaires

J'ai besoin d'utiliser le format ci-dessus. C'est là que je suis bloqué sur la façon d'ajouter un attribut conditionnel à l'aide de ce format HTML.TextBox?



17
votes

C'était laid pour nous, car le fait que la spécification HTML est moche ici.

Fondamentalement dans notre code de vue, nous avons eu une logique comme ceci: p> xxx pré> > Ensuite, pour nos contrôles, nous avons eu ceci: p>

<%=Html.CheckBoxFor(f => f.AddToReleaseIndicator, disabledAttributes)%>


0 commentaires

3
votes

En réalité, il est possible d'écrire une classe d'extension au HTMLhelper pour le faire, mais vous devez mettre en œuvre de nombreuses substitutions afin que la solution la plus rapide que j'ai trouvée était d'écrire une extension de dictionnaire.

Vous pouvez utiliser ci-dessous classe pour cela: < / p> xxx

Pour l'utiliser, importez la classe à votre vue et votre code de vue ressemble à ceci: xxx

vous pouvez ajouter Autant d'attributs que vous le souhaitez depuis que la méthode d'extension ajoute la valeur au dictionnaire et renvoie le dictionnaire lui-même


0 commentaires