【问题标题】:MVC 3 - Restrict decimal data to 2 decimal placesMVC 3 - 将十进制数据限制为 2 位小数
【发布时间】:2012-10-01 10:10:51
【问题描述】:

我有一个项目,我正在使用 Razor 视图使用 MVC 3 开发。

我有一个 Decimal 数据类型,用户可以在其中输入金额。数据被提交给第三方,他们坚持该金额最多保留 2 个小数位。金额必须大于零。最大数量取决于从数据库中检索的值。所以我不能硬编码最大范围,比如 9999.99。

示例:- 假设当前交易的最大金额为 123.45。我需要验证用户在文本框中输入的金额在 0.01 到 123.45 之间。如果用户输入 123.46,这将是无效的,因为它超过了最大值。如果用户输入 100.123,这也是无效的,因为它会超过 2 位小数的最大值。

到目前为止的研究......我想我会先尝试解决小数位问题。我想知道将其应用于我的模型是否可行...

<DisplayFormat(ApplyFormatInEditMode:=True, DataFormatString:="{0.00}")>
Public Property PaymentAmount As Decimal

查看:-

@Html.TextBoxFor(Function(model) model.PaymentAmount)

...但这似乎无济于事。

问题:-

  1. 如何为限制为 2 位小数的范围创建验证,该范围接受 0.01 到 X 之间的值(其中 X 是在显示视图之前从数据库返回的最大预定值)?

  2. 这是否也适用于不显眼的客户端验证?

我正在考虑创建一个自定义验证属性,并将其用于客户端验证,我认为这会起作用,但对于表面上看起来像是一个非常简单的问题的事情来说,这似乎有点矫枉过正。

【问题讨论】:

  • 可以使用^\d*\.?\d{0,2}$这样的正则表达式,也可以直接使用pattern="^\d*\.?\d{0,2}$"这样的html 5模式属性

标签: asp.net-mvc-3 validation


【解决方案1】:

我认为您需要从数据库中获取最大交易量。那么你需要写成,

<input type="text" pattern="^\d*\.?\d{0,2}$" id="txtAmount"/>
<input type="button" id="btnSubmit" onclick="return ValidateAmount(@Model.MaxAmount)"/>

in script block

function ValidateAmount(amt)
{
  var useramount=$('txtAmount').val();
  if(useramount>amt)
{
alert('max amount exceeded.etc');
return false;
}
else
{
return true;
}
}

如果交易的最大金额是固定的,那么您可能没有问题可以直接在 javascript 代码中使用。希望对您有所帮助。

【讨论】:

  • 是的,我想我可以做这样的事情。这不利于在此页面上使用 MVC 3 不显眼的验证,但这可能是最简单的解决方案。
  • html 5 模式似乎在 IE 中不起作用,w3schools 也这么说。为了解决这个问题,我在 jQuery 中对正则表达式进行了匹配。
猜你喜欢
  • 2018-03-10
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
  • 2017-03-08
  • 2014-07-07
  • 2012-03-22
相关资源
最近更新 更多