这是我在MVC 5中的代码:
@Html.EditorFor(model => model.myfloatvalue, new { @type = "number", @min = "0", @step = "0.01", @value = "0" })
这是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="">
不到
<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">
我该怎么办?
感谢您的回复!
您是否尝试过将您的匿名对象包装在另一个匿名对象的htmlAttributes
中?当使用EditorFor
/TextBoxFor
时,我相信MVC 5是影响编辑器输出的HTML属性的唯一方法。
@Html.EditorFor(model => model.myfloatvalue, new { htmlAttributes = new { @type = "number", @min = "0", @step = "0.01", @value = "0" }})
如果未使用MVC-5.1或更高版本,则需要使用TextBoxFor()
。注意此处未使用htmlAttributes
:
@Html.TextBoxFor(m => m.myfloatvalue, new { type = "number", min = "0", step = "0.01" }) // don't set the value attribute
您实际上可以更改float
的EditorFor的默认行为,使其生成type="number"
而不是type="text"
。
为此,您需要为Single
(而非float
)类型向/Views/Shared/EditorTemplates/Single.cshtml
添加自定义EditorTemplate
,如下所示:
@model Single?
@{
var attributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"]);
if (!attributes.ContainsKey("type")) { attributes.Add("type", "number"); }
}
@Html.TextBoxFor(m => m, attributes)
这样做的原因是float
是System.Single
的C#别名(有关详细信息,请参阅Microsoft C#语言参考)。添加一个名为Float.chtml的EditorTemplate
将不起作用(我尝试过…)
我是从@Stephen Muecke对我的问题的出色回答中得到这个想法的。他还提到了创建自己的HtmlHelper
扩展以便编写@Html.FloatFor(...)
的想法。
这种相同的方法也可以应用于Decimal
和Double
,这两种方法默认情况下也会渲染type="text"
。