【问题标题】:Allow text box entry without leading zero允许不带前导零的文本框输入
【发布时间】:2011-10-17 19:28:08
【问题描述】:

我有一个 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;
}

【问题讨论】:

  • 所以我不想在这里回答我自己的问题,因为我真的觉得 MVC 应该解决这个问题,但我找到了两个解决方案:要么编写客户验证,要么使用字符串而不是双精度然后执行在服务器端有一个 TryParse() 。不过,我不太喜欢这两种解决方案中的任何一种,所以我会留下这个问题,看看我是否能得到更好的答案。
  • 我也有同样的问题。我不明白 .25 不是数字,但 0.25 是。将逗号放在 int 中的问题相同。在那种情况下,我也求助于制作一个字符串。
  • 仍然没有简单的答案吗? .25 == 0.25?

标签: asp.net-mvc razor numeric


【解决方案1】:

您正在为 Double 类型的对象设置一个类型不正确的值(在这种情况下为“.11”)。它总是会失败。

你有几个我能想到的选项。

或者,

  • 您可以保持您的代码原样,然后通过客户端代码(如 JavaScript 或 JQuery)在客户端上检测那里的内容,所以您说您只担心“.12”之类的点,然后如果您检测到场景添加前导零或数字,具体取决于您想要的内容。这将确保它到达服务器时它是一个十进制值并被接受,而无需在服务器端解析或更改。

【讨论】:

    【解决方案2】:

    我相信 answer here 指出了真正的罪魁祸首 - 1.10 之前的 jQuery.Validation 版本有一个损坏的验证正则表达式。根据后面的 cmets 答案,只需将您的 jQuery.Validation 升级(例如nuget)到最新版本。

    就我而言,从1.9.0.1 升级到1.11.1 就可以了。根本不需要服务器端/模型绑定器/字符串 ViewModel 更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-25
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-15
      • 2014-06-18
      • 2010-09-14
      相关资源
      最近更新 更多