Voici mon code dans MVC 5:
@Html.EditorFor(model => model.myfloatvalue, new { @type = "number", @min = "0", @step = "0.01", @value = "0" })
Et voici le code html:
<input class="text-box single-line" data-val="true" data-val-number="The field Fix Amount must be a number." data-val-required="The Fix Amount field is required." id="myfloatvalue" name="myfloatvalue" type="text" value="">
Pas à
<input class="text-box single-line" data-val="true" data-val-number="The field Fix Amount must be a number." data-val-required="The Fix Amount field is required." id="myfloatvalue" name="myfloatvalue" type="number" min="0" step="0.01" value="0">
Que devrais-je faire?
Merci pour la réponse!
Avez-vous essayé d'encapsuler votre objet anonyme dans la htmlAttributes
d'un autre objet anonyme? Lors de l'utilisation de EditorFor
/TextBoxFor
, je crois que MVC 5 est le seul moyen d'affecter les attributs HTML générés par l'éditeur.
@Html.EditorFor(model => model.myfloatvalue, new { htmlAttributes = new { @type = "number", @min = "0", @step = "0.01", @value = "0" }})
Si vous n'utilisez pas MVC-5.1 ou une version ultérieure, vous devrez utiliser TextBoxFor()
. Remarque: non htmlAttributes
utilisé ici:
@Html.TextBoxFor(m => m.myfloatvalue, new { type = "number", min = "0", step = "0.01" }) // don't set the value attribute
En réalité, vous pouvez modifier le comportement par défaut de EditorFor pour float
afin qu’il produise type="number"
au lieu de type="text"
.
Pour ce faire, vous devez ajouter une EditorTemplate
personnalisée pour le type Single
(pasfloat
) à /Views/Shared/EditorTemplates/Single.cshtml
comme suit:
@model Single?
@{
var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"]);
if (!attributes.ContainsKey("type")) { attributes.Add("type", "number"); }
}
@Html.TextBoxFor(m => m, attributes)
Cela fonctionne parce que float
est un alias C # pour System.Single
(voir le Référence du langage Microsoft c # pour plus de détails à ce sujet). Ajouter une EditorTemplate
appelée Float.cshtml ne fonctionnera pas (j'ai essayé ...).
J'ai eu l'idée de cela grâce à l'excellente réponse de @ Stephen Muecke _ à ma question ici . Il mentionne également l'idée de créer votre propre extension HtmlHelper
afin que vous puissiez ensuite écrire @Html.FloatFor(...)
.
Cette même approche peut également être appliquée à Decimal
et Double
, qui rendent également type="text"
par défaut.