如何强制 Razor 让 Editorfor 为浮点变量输入数字类型?
How to force Razor to make Editorfor to input number type for float variable?
这是我在 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
(not float
)类型添加自定义 EditorTemplate
到 /Views/Shared/EditorTemplates/Single.cshtml
如下:
@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# Language Reference)。添加一个名为 Float.cshtml 的 EditorTemplate
将不起作用(我试过...)。
我从@Stephen Muecke's excellent answer 那里得到了这个想法。他还提到了创建自己的 HtmlHelper
扩展名的想法,这样您就可以编写 @Html.FloatFor(...)
.
同样的方法也可以应用于 Decimal
和 Double
,它们都默认呈现 type="text"
。
这是我在 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
(not float
)类型添加自定义 EditorTemplate
到 /Views/Shared/EditorTemplates/Single.cshtml
如下:
@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# Language Reference)。添加一个名为 Float.cshtml 的 EditorTemplate
将不起作用(我试过...)。
我从@Stephen Muecke's excellent answer HtmlHelper
扩展名的想法,这样您就可以编写 @Html.FloatFor(...)
.
同样的方法也可以应用于 Decimal
和 Double
,它们都默认呈现 type="text"
。