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!

20
demandé sur NightOwl888 2015-11-17 14:17:12

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
31
répondu Slicksim 2018-02-16 10:42:36

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.

0
répondu tomRedox 2018-08-28 14:30:37
<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" />
-1
répondu YOUSUF KHAN Softdevent 2018-02-26 10:00:33