如何强制Razor使Editorfor为浮点变量输入数字类型



这是我在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)

这样做的原因是floatSystem.Single的C#别名(有关详细信息,请参阅Microsoft C#语言参考)。添加一个名为Float.chtml的EditorTemplate将不起作用(我尝试过…)

我是从@Stephen Muecke对我的问题的出色回答中得到这个想法的。他还提到了创建自己的HtmlHelper扩展以便编写@Html.FloatFor(...)的想法。

这种相同的方法也可以应用于DecimalDouble,这两种方法默认情况下也会渲染type="text"

相关内容

  • 没有找到相关文章

最新更新