2010-11-02 3 views
13

par défaut avecÉcrasement la classe sur un `Html.EditorFor`

<%: Html.EditorFor(m => m.ConfirmationHeadline) %> 

la sortie est:

<input type="text" value="" 
     name="ConfirmationHeadline" id="ConfirmationHeadline" 
     class="text-box single-line"> 

Comme vous pouvez le voir, l'entrée déjà un attribut ajoute class. Eh bien, cela ne devrait pas être un problème, il suffit d'utiliser

<%: Html.EditorFor(m => m.ConfirmationHeadline, new { @class="span-11 last"}) %> 

et devrait fonctionner ... err ... Nope!

cela produira exactement le même code!

cependant, fonctionne très bien avec Html.TextAreaFor()

Comment puis-je supprimer la classe text-box single-line de apparaissent toujours si mes propres classes pourraient être ajoutées? un modèle T4 que je devrais éditer?

Merci pour toute l'aide.

Répondre

11

Il n'existe aucun moyen de personnaliser la valeur de l'attribut de classe émise lors de l'utilisation de modèles d'éditeur intégrés via la méthode EditorFor. CHER codes, la valeur de la classe (plus d'info ici: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-3-default-templates.html)

Vous avez deux options:

  1. Rédigez votre propre modèle personnalisé qui prend en charge la fonctionnalité supplémentaire. Jetez un coup d'oeil ici pour plus de détails: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html

  2. processus de la sortie de la méthode EditorFor:

<%: new HtmlString(Html.EditorFor(m=>m.ConfirmationHeadline).ToString() 
     .Replace("class=\"text-box single-line\"", 
       "class=\"text-box single-line span-11 last\"")) %> 
+1

après avoir lu toutes les parties des exemples de Brad, je fini par utiliser '<%: Html.TextBox ("ConfirmationHeadline", null, nouveau {@class = "span-11 last"})%> 'Merci pour les liens. – balexandre

+0

Est-ce que cela fonctionne toujours de la même manière en mvc4? – Nikos

2

asp.net mvc crée un fichier appelé site.css dans le dossier de contenu. Là, vous pouvez voir que la classe de zone de texte est définie à une largeur de 30em par défaut. Réinitialiser à quelque chose de plus sain comme 15em. La classe de ligne unique ne semble être définie nulle part.

+1

J'ai toujours fossé le site.css! – Nikos

1

Vous pouvez utiliser à la place TextBoxFor

+2

juste pour vous assurer, connaissez-vous la différence entre 'EditorFor' et' TextboxFor'? Vous pouvez [vérifier ici] (http://stackoverflow.com/questions/4826173) pour une réponse rapide. – balexandre

0

J'ai eu ce même problème et ne pas comme l'une des solutions ci-dessus. J'ai également trouvé un article similaire here, mais je n'ai pas aimé ces solutions non plus. Après quelques outils autour, j'ai trouvé quelque chose que j'ai aimé, ce qui m'a permis de continuer à utiliser les modèles d'éditeur (ce qui est quelque chose que vous devriez essayer de tirer profit de chaque fois que vous le pouvez). J'ai publié la solution here

5

Dans MCV 5.1, vous pouvez utiliser htmlAttributes. Fonctionne comme un charme ...

@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control", placeholder = "Enter your Name" } }) 
-2

essayer ce code

@Html.Raw(
    Html.EditorFor(m => m.DataInicial).ToString() 
    .Replace(
     "\"text-box single-line\"", 
     "\"form-control text-box single-line\"")) 
+4

Vous feriez mieux d'ajouter quelques explications. – lpratlong

+0

AVIS sur l'article de qualité médiocre: Suivez les conseils de @Ipratlong. Cette réponse dans le formulaire actuel est susceptible d'être supprimée pour des raisons de modération. – ElmoVanKielmo

Questions connexes