MVC 3 - 将十进制数据限制为2位小数

时间:2012-10-01 10:10:52

标签: asp.net-mvc-3 validation

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

我有一个十进制数据类型,用户可以在其中输入金额。数据提交给第三方,他们坚持认为金额最多为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. 这可以用于不引人注意的客户端验证吗?

  3. 我正在考虑创建一个自定义验证属性,并将其连接到我认为可行的客户端验证,但看起来像是一种过度杀戮的东西,从表面上来看似乎是一个非常简单的问题。 / p>

1 个答案:

答案 0 :(得分:2)

我认为您需要从数据库中获取最大数量的事务。然后你需要写像,

<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代码中使用。希望它有所帮助。