web-dev-qa-db-fra.com

MVC5 et Bootstrap3: Html.EditorFor mauvaise classe? Comment changer?

Je viens de remarquer que MVC 5 utilise une classe différente pour les champs d'entrée lors de l'utilisation de EditorFor. Je pense que c'est à partir d'une version inférieure de bootstrap, donc la classe actuelle ne s'additionne pas vraiment. 

Je parle de ça:

<div class="form-group">
    @Html.LabelFor(model => model.Contact.CellphoneNo, new { @class = "control-label col-md-4"})
       <div class="col-md-8">
           @Html.EditorFor(model => model.Contact.CellphoneNo)
           @Html.ValidationMessageFor(model => model.Contact.CellphoneNo)
       </div>
</div>

Quels résultats à ceci:

<div class="form-group">
    <label class="control-label col-md-4" for="Contact_CellphoneNo">CellphoneNo</label>
    <div class="col-md-8">
        <input class="text-box single-line" id="Contact_CellphoneNo" name="Contact.CellphoneNo" type="text" value="">
        <span class="field-validation-valid" data-valmsg-for="Contact.CellphoneNo" data-valmsg-replace="true"></span>
    </div>
</div>

Lorsque vous regardez la balise, elle a "text-box" class au lieu de Bootstrap3 "form-control"

Je pense avoir lu quelque part quelque part que cela était dû au fait que MVC5 a basculé vers Bootstrap 3 à la dernière minute ou quelque chose du genre.


La question est: Comment puis-je changer cette classe manuellement? Je veux pouvoir changer de zone de texte en contrôle de formulaire. Je ne trouve pas vraiment le code cependant.

J'ai aussi déjà essayé ça

@Html.EditorFor(model => model.CivilStatus, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.CivilStatus)

Ce qui ne semble pas fonctionner. Je suis perplexe. Des idées?

Merci d'avance!

17
Dominic

EditorFor n'accepte pas les attributs HTML en tant que paramètre. Le paramètre que vous utilisez est en fait additionalViewData

Utilisez TextBoxFor à la place

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

Modifier

À partir de MVC 5.1, les attributs HTML peuvent être transmis à EditorTemplate à l'aide de cette syntaxe.

@Html.EditorFor(m => m.UserName, new { htmlAttributes = new { @class = "form-control" } })
50
LostInComputer

Si vous utilisez MVC 5 ou une version antérieure, utilisez @Html.TextBoxFor au lieu de @Html.EditorFor comme indiqué dans le code suivant:

@Html.TextBoxFor(model => model.CivilStatus,new { @class = "form-control" }

et si vous devez également le lier à l'attribut modelview knockout.js, alors:

@Html.TextBoxFor(model => model.CivilStatus, new { data_bind="value: author.civilStatus", @class = "form-control" })

J'ai utilisé cela avec MVC4, ça marche pour moi:

@Html.TextBoxFor(model => model.FirstName, new { data_bind="value: author.firstName", @class = "form-control" })
0
user5759686