.
RPAlbert'in Html.EmailFor yanıtına benzer bir şekilde, normal Html.TextBoxFor'u kullanarak kullanmaya başladım, ancak daha sonra bir dize yerine HTML'yi değiştirmek için LinqToXml kullandım.
Html.TextBoxFor ile başlatmanın avantajı, MVC'nin sizin için yaptığı tüm istemci tarafı doğrulama maddelerini kullanabilmenizdir. Bu durumda, çeviriciyi sınırlamak için gerekli olan min/max özniteliklerini ayarlamak için data-val-range
özniteliklerinden değerleri kullanıyorum.
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());
}
Daha sonra olarak kullanmak
yapacağınız görüşleriniz başka HtmlHelper:
@Html.SpinnerFor(model => model.SomeNumber, new { htmlAttribute1 = "SomeValue" })
Seni istediğini görebilirsiniz soru gelen bu onun benim uygulanması, yine de oldu:
@Html.NumericInputFor(model => model.Foo, min:0, max:100)
O şöyle bunu yapmak benim yöntemi çimdik çok basit olacaktır:
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());
}
Temelde ben ve yapılan tüm yeniden adlandırmak ve DataAnnotation niteliklerini onları almak yerine argümanlar olarak min/max sağlamaktır.
Umarım bu yardımcı olur!
@ Drew - inanın tarihine, tarihine ve zamanına dahil olduğuna inanıyoruz (bunlar kesinlikle mvc4 sürümünün bir parçasıdır). neden aksini söylüyorsun –
Yorumu yanlış yorumladım: _Bu otomatik olarak tel, url, e-posta, tarih, tarih, saat ve numaralar için bunu yapmamız gerekiyor. Dokümanlara bağlandım ve örnek kodu genişlettim. Güzel bul, teşekkürler. –