2011-10-17 40 views
3

我有一个ASP.NET Web应用程序,我的视图模型有一个双字段PowerPrice,但是如果用户没有输入前导零,字段的验证将关闭。验证会说“请输入一个数字”。我如何允许用户输入“.11”而不是要求“0.11”?这是我的观点和型号代码:允许不带前导零的文本框输入

<div class="editor-field"> 
    @Html.EditorFor(model => model.PowerPrice) 
    @Html.ValidationMessageFor(model => model.PowerPrice) 
</div> 

public double PowerPrice 
{ 
    get; 
    set; 
} 
+2

所以我讨厌在这里回答我自己的问题,因为我真的觉得MVC应该照顾这个,但我发现了两种解决方案:或者写一个客户验证或使用字符串而不是双重然后做一个TryParse()它在服务器端。我不太喜欢这两种解决方案中的任何一种,所以我会留下这个问题,看看我能否得到更好的答案。 –

+0

我有同样的问题。我不明白.25是如何不是一个数字,但是0.25。把逗号放在int中也是一样的问题。在这种情况下,我也采取了一个措辞。 – PilotBob

+0

这仍然没有简单的答案? .25 == 0.25? –

回答

1

您设置一个值,在这种情况下,” 0.11" ,以一个double类型的对象正确类型的不是。它总是会失败。

你有几个选择,我可以想到我的头顶。

或者,

  • 你可以让你的代码然后在客户端通过客户端代码(如JavaScript或JQuery)检测到那里有什么,所以你说你只是担心点“.12”,然后如果你检测到这种情况,请添加一个前导零或数字,具体取决于你想要什么。这将确保它到达服务器的十进制值,并在服务器端不接受解析或更改。
0

我相信这answer here确定实际的罪魁祸首 - jQuery.Validation版本之前1.10有一个破损的验证正则表达式。根据后面对答案的评论,只需将您的jQuery.Validation升级(例如nuget)到最新版本即可。

在我的情况下,从1.9.0.1升级到1.11.1诀窍。没有服务器端/模型绑定器/字符串ViewModel根本不需要改变。

相关问题