Comment forcer Razor à faire Editorfor pour entrer le type de nombre pour la variable float?
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="">
de ne 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 dois-je faire?
Merci pour la réponse!
3 réponses
avez-vous essayé d'envelopper votre objet anonyme dans le htmlAttributes
d'un autre objet anonyme? En utilisant EditorFor
/ TextBoxFor
, je crois en MVC5 que c'est la seule façon d'affecter les attributs HTML produits 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 plus, vous devrez utiliser TextBoxFor()
.
Note no htmlAttributes
utilisée ici:
@Html.TextBoxFor(m => m.myfloatvalue, new { type = "number", min = "0", step = "0.01" }) // don't set the value attribute
vous pouvez en fait modifier le comportement par défaut de L'éditeur pour un float
de sorte qu'il produit type="number"
au lieu de type="text"
.
pour ce faire, vous devez ajouter une coutume EditorTemplate
pour le Single
( pas float
) type à /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)
la raison pour laquelle cela fonctionne est que float
est un # alias C pour System.Single
(voir le Microsoft c# Référence linguistique pour plus de détails à ce sujet). Ajout d'un EditorTemplate
appelé Float.cshtml ne fonctionnera pas (j'ai essayé...).
j'ai eu l'idée de @ Stephen Muecke bonne réponse à ma question ici . Il mentionne également l'idée de créer votre propre extension HtmlHelper
pour que vous puissiez ensuite écrire @Html.FloatFor(...)
.
Cette même approche peut également être appliquée à Decimal
et Double
, qui rendent aussi type="text"
par défaut.
<input type="text" name="search" id="txtSearch" class=" search-query form-control" placeholder="Search by Id" onkeypress="return event.charCode >= 48 && event.charCode <= 57" onpast="return false" />