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" />