J'essaye d'ajouter une classe à une entrée.
Cela ne fonctionne pas:
@Html.EditorFor(x => x.Created, new { @class = "date" })
asp.net-mvc
asp.net-mvc-3
razor
user137348
la source
la source
Réponses:
Ajouter une classe à
Html.EditorFor
n'a pas de sens car dans son modèle, vous pouvez avoir de nombreuses balises différentes. Vous devez donc affecter la classe dans le modèle de l'éditeur:et dans le modèle personnalisé:
la source
À partir d'ASP.NET MVC 5.1, l'ajout d'une classe à un
EditorFor
est possible (la question d'origine spécifiait ASP.NET MVC 3, et la réponse acceptée est toujours la meilleure avec celle considérée).Voir: Quoi de neuf dans ASP.NET MVC 5.1, prise en charge de Bootstrap pour les modèles d'éditeur
la source
Vous ne pouvez pas définir de classe pour le EditorFor générique. Si vous connaissez l'éditeur que vous voulez, vous pouvez l'utiliser tout de suite, vous pouvez y définir la classe. Vous n'avez pas besoin de créer de modèles personnalisés.
la source
Vous pouvez utiliser:
(Au moins avec ASP.NET MVC 5, mais je ne sais pas comment c'était avec ASP.NET MVC 3.)
la source
J'ai eu le même problème frustrant et je ne voulais pas créer un EditorTemplate qui s'appliquait à toutes les valeurs DateTime (il y avait des moments dans mon interface utilisateur où je voulais afficher l'heure et non un calendrier déroulant de l' interface utilisateur jQuery ). Dans mes recherches, les problèmes fondamentaux que j'ai rencontrés étaient:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
, mais il ne me permettrait pas d'appliquer la classe "date-picker" personnalisée.Par conséquent, j'ai créé une classe HtmlHelper personnalisée qui présente les avantages suivants:
Cette méthode remplace cela par une chaîne vide.
Et pour ceux qui veulent connaître la syntaxe JQuery qui recherche des objets avec la
date-picker
décoration de classe pour ensuite rendre le calendrier, le voici:la source
DateTimePickerFor
et en mettant à jour le champ de date du modèle que vous représentez avec[DataType(DataType.Date)]
ou[DataType(DataType.DateTime)]
? Vous pouvez également le mettre sous la forme, par exemple, mm / jj / aaaa avec.ParseFormats(new string[] { "MM/dd/yyyy" })
(ou le modifier comme vous le souhaitez, facilement). S'il est nul, le champ est rendu vide sans avoir à le coder.@MyHtmlHelpers.CalenderTextBoxFor(model => model.ExpirationDate)
. Des idées sur la façon de mettre en œuvre cela?Il est possible de fournir une classe ou d'autres informations via AdditionalViewData - J'utilise ceci lorsque j'autorise un utilisateur à créer un formulaire basé sur des champs de base de données (propertyName, editorType et editorClass).
Sur la base de votre exemple initial:
et dans le modèle personnalisé:
la source
Il n'y a aucun
EditorFor
remplacement qui vous permet de transmettre un objet anonyme dont les propriétés seraient en quelque sorte ajoutées en tant qu'attributs sur certaines balises, en particulier pour les modèles d'éditeur intégrés. Vous devrez écrire votre propre modèle d'éditeur personnalisé et transmettre la valeur souhaitée en tant que données d'affichage supplémentaires.la source
n'autorise pas la transmission d'arguments pour la zone de texte
C'est ainsi que vous pouvez appliquer des attributs.
la source
En utilisant jQuery, vous pouvez le faire facilement:
Voici votre balise d'entrée
Pour DropDownlist, vous pouvez utiliser celui-ci:
Pour la liste déroulante:
la source
Alors que la question visait MVC 3.0, nous constatons que le problème persiste également dans MVC 4.0. MVC 5.0 inclut désormais nativement une surcharge pour htmlAttributes.
Je suis obligé d'utiliser MVC 4.0 sur mon lieu de travail actuel et j'ai besoin d'ajouter une classe css pour l'intégration JQuery. J'ai résolu ce problème en utilisant une seule méthode d'extension ...
Méthode d'extension:
Utilisation du balisage HTML:
(Assurez-vous d'inclure l'espace de noms de la méthode d'extension dans la vue rasoir)
Explication: L'idée est d'injecter dans le HTML existant. J'ai choisi d'analyser l'élément actuel en utilisant Linq-to-XML en utilisant
XDocument.Parse()
. Je passe les htmlAttributes comme typeobject
. J'utilise MVCRouteValueDictionary
pour analyser les htmlAttributes transmis. Je fusionne les attributs là où ils existent déjà, ou ajoute un nouvel attribut s'il n'existe pas encore.Dans le cas où l'entrée n'est pas analysable par,
XDocument.Parse()
j'abandonne tout espoir et renvoie la chaîne d'entrée d'origine.Maintenant, je peux utiliser l'avantage de DisplayFor (rendre les types de données tels que la devise de manière appropriée) mais j'ai également la possibilité de spécifier des classes css (et tout autre attribut d'ailleurs). Cela peut être utile pour ajouter des attributs tels que
data-*
, oung-*
(Angular).la source
Vous pouvez créer le même comportement en créant un simple éditeur personnalisé appelé DateTime.cshtml, en l'enregistrant dans Views / Shared / EditorTemplates
et dans vos vues
Notez que dans mon exemple, je codifie en dur deux classes css et le format de date. Vous pouvez bien sûr changer cela. Vous pouvez également faire la même chose avec d'autres attributs html, tels que lecture seule, désactivé, etc.
la source
J'ai utilisé une autre solution utilisant des sélecteurs d'attributs CSS pour obtenir ce dont vous avez besoin.
Indiquez l'attribut HTML que vous connaissez et mettez le style relatif que vous souhaitez.
Comme ci-dessous:
la source
Pas besoin de créer un modèle personnalisé pour MVC 4. Utilisez TextBox au lieu de EditFor ici les attributs html spéciaux ne sont pas pris en charge, il est uniquement pris en charge à partir de MVC 5. TextBox doit prendre en charge MVC 4, je ne connais pas les autres versions.
la source
Vous pouvez également le faire via jQuery:
la source
J'avais juste besoin de définir la taille d'une zone de texte sur une page. Le codage des attributs sur le modèle et la création de modèles d'éditeur personnalisés étaient exagérés, j'ai donc juste enveloppé l'appel @ Html.EditorFor avec une balise span qui appelait une classe qui spécifie la taille de la zone de texte.
Déclaration de classe CSS:
Afficher le code:
la source
Une meilleure façon d'appliquer une classe à
@Html.EditorFor()
dans MVC3 RAzor estCela ajoutera du style ci-dessus à votre
EditorFor()
Cela fonctionne pour MVC3.
la source