如何强制 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"

为此,您需要为 Singlenot 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)

之所以有效,是因为 floatSystem.Single 的 C# 别名(有关详细信息,请参阅 Microsoft c# Language Reference)。添加一个名为 Float.cshtml 的 EditorTemplate 将不起作用(我试过...)。

我从@Stephen Muecke's excellent answer 那里得到了这个想法。他还提到了创建自己的 HtmlHelper 扩展名的想法,这样您就可以编写 @Html.FloatFor(...).

同样的方法也可以应用于 DecimalDouble,它们都默认呈现 type="text"