asp.net-mvc - mvc - html.editorfor value
¿Cómo forzar a Razor a hacer que Editorfor ingrese el tipo de número para la variable flotante? (3)
Aquí está mi código en MVC 5:
@Html.EditorFor(model => model.myfloatvalue, new { @type = "number", @min = "0", @step = "0.01", @value = "0" })
Y aquí está el código 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="">
No a
<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">
¿Qué tengo que hacer?
¡Gracias por responder!
¿Ha intentado envolver su objeto anónimo en los htmlAttributes
de otro objeto anónimo? Cuando EditorFor
/ TextBoxFor
, creo que en MVC 5 es la única forma de afectar los atributos HTML generados por el editor.
@Html.EditorFor(model => model.myfloatvalue, new { htmlAttributes = new { @type = "number", @min = "0", @step = "0.01", @value = "0" }})
Si no usa MVC-5.1 o superior, deberá usar TextBoxFor()
. Tenga en cuenta que no se utilizan htmlAttributes
aquí:
@Html.TextBoxFor(m => m.myfloatvalue, new { type = "number", min = "0", step = "0.01" }) // don''t set the value attribute
En realidad, puede cambiar el comportamiento predeterminado de EditorFor para un float
modo que produzca type="number"
lugar de type="text"
.
Para hacerlo, debe agregar una EditorTemplate
de EditorTemplate
personalizada para el tipo Single
( no float
) a /Views/Shared/EditorTemplates/Single.cshtml
siguiente manera:
@model Single?
@{
var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"]);
if (!attributes.ContainsKey("type")) { attributes.Add("type", "number"); }
}
@Html.TextBoxFor(m => m, attributes)
La razón por la que esto funciona es que float
es un alias de C # para System.Single
(consulte la Referencia del lenguaje de c # de Microsoft para obtener más detalles). Agregar un EditorTemplate
llamado Float.cshtml no funcionará (lo intenté ...).
Tengo la idea para esto de la excelente respuesta de @ Stephen Muecke a mi pregunta aquí . También menciona la idea de crear tu propia extensión HtmlHelper
para que luego puedas escribir @Html.FloatFor(...)
.
Este mismo enfoque también se puede aplicar a Decimal
y Double
, que también muestran type="text"
de forma predeterminada.
<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" />