net mvc example asp asp.net-mvc razor html-input editorformodel

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