encontré mi auto querer el número spinner que se obtiene al utilizar <input type='number' />
de un HtmlHelper, y terminó la solución de mi auto.
De manera similar a la respuesta Html.Email de RPAlbert Para la respuesta anterior, comencé a usar el Html.TextBoxFor normal, pero luego usé LinqToXml para modificar el código HTML en lugar de simplemente usar una cadena para reemplazar.
La ventaja de comenzar con el Html.TextBoxFor es que se puede utilizar de todas las cosas de validación del lado del cliente que MVC hace por usted. En este caso estoy usando los valores de la data-val-range
atributos para definir los atributos min/max necesarios para restringir el spinner.
public static HtmlString SpinnerFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes)
{
XDocument _xml = XDocument.Parse(html.TextBoxFor(expression, htmlAttributes).ToString());
XElement _element = _xml.Element("input");
if (_element != null)
{
_element.SetAttributeValue("type", "number");
if (_element.Attribute("data-val-range-max") != null)
_element.SetAttributeValue("max", _element.Attribute("data-val-range-max").Value);
if (_element.Attribute("data-val-range-min") != null)
_element.SetAttributeValue("min", _element.Attribute("data-val-range-min").Value);
}
return new HtmlString(_xml.ToString());
}
A continuación, utilizarlo como lo haría con cualquier otra HtmlHelper en sus puntos de vista:
@Html.SpinnerFor(model => model.SomeNumber, new { htmlAttribute1 = "SomeValue" })
Esta fue mi implementación de todos modos, desde que pregunta que yo puedo ver que quería:
@Html.NumericInputFor(model => model.Foo, min:0, max:100)
sería muy sencillo de ajustar mi método para hacer esto de la siguiente manera:
public static HtmlString NumericInputFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, int min, int max)
{
XDocument _xml = XDocument.Parse(html.TextBoxFor(expression, htmlAttributes).ToString());
XElement _element = _xml.Element("input");
if (_element != null)
{
_element.SetAttributeValue("type", "number");
_element.SetAttributeValue("min", min);
_element.SetAttributeValue("max", max);
}
return new HtmlString(_xml.ToString());
}
Básicamente todo lo que he hecho es cambiarle el nombre y proporcionar min/max como argumentos en lugar de obtenerlos de los atributos de DataAnnotación.
Espero que ayude!
@Drew: cree que la fecha, la fecha y hora están incluidas en ese elemento de trabajo (sin duda son parte de la versión de mvc4). ¿Por qué dices lo contrario? –
me malinterpretó el comentario: _We necesita hacer esto de forma automática por teléfono, URL, correo electrónico, fecha y hora, la fecha, la hora y number._ me he vinculado a los documentos y extendieron el código de ejemplo. Buen hallazgo, gracias. –