Asp.net mvc 如何强制Razor使Editorfor为浮点变量输入数字类型?
以下是我在MVC 5中的代码: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
@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(显示正确的语法),所以我只需编辑该答案,你就可以接受它。