Asp.net mvc 如何强制Razor使Editorfor为浮点变量输入数字类型?

Asp.net mvc 如何强制Razor使Editorfor为浮点变量输入数字类型?,asp.net-mvc,razor,html-input,editorformodel,Asp.net Mvc,Razor,Html Input,Editorformodel,以下是我在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 num

以下是我在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

实际上,您可以更改编辑器for的默认行为,使其生成
type=“number”
而不是
type=“text”

为此,您需要为
单个
浮动
)类型向
/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#别名(有关详细信息,请参阅)。添加名为Float.cshtml的
EditorTemplate
将不起作用(我尝试了…)

我是从"的绝妙回答中得到这个想法的。他还提到了创建自己的
HtmlHelper
扩展的想法,这样您就可以编写
@Html.FloatFor(…)


同样的方法也可以应用于
Decimal
Double
,这两种方法默认情况下也会呈现
type=“text”

mvc 5.1中添加了对htmlAttributes的支持,您运行的是哪个版本?如果您查看System.web.mvc程序集重定向的web.config,DLL的版本是4.0.0,正在重定向到哪个版本的dll?在我的5.2.2.0中。上面的代码在该版本中工作。您可能需要将项目升级到更高版本的mvc,或者切换回textboxfor,或者可能在您的模型上尝试UiHint属性。这在IE中似乎不起作用,但在Chrome中效果很好。您在第二个示例中有一个重复的大括号
}
您无法通过这种方式将html属性添加到
EditorFor()
(除非您使用的是MVC-5.1或更高版本)将其更改为
@Html.TextBoxFor(m=>m.myfloatvalue,new{type=“number,min=0,…。})
,但当我单击Submit按钮时,TextBoxFor返回null。您的意思是什么?
@TextBoxFor()
方法呈现的
@EditorFor()
完全相同(除了你可以添加html属性)是的,你是对的。如果我按照模型模式发布当前模型,它就会工作。我发布的是一个一个一个的输入。Slicsim添加了一个答案,假设你使用的是MVC-5.1(显示正确的语法),所以我只需编辑该答案,你就可以接受它。