2010-12-04 91 views
4
public Decimal SalePrice { get; set; } 

十进制数据entery

<%= Html.TextBoxFor(Model => Model.SalePrice) %> 

是什么,以确保从用户的验证或正确输入条目的好办法?像只允许数字输入和最多两个小数点的东西?

回答

7

像下面这样的正则表达式应该工作:

\A\d+(\.\d{1,2})?\Z 

此相匹配的输入,如:

2.00 
25.70 
04.15 
2.50 
525.43 
423.3 
52 

而且,正如迈克建议,你可以在数据验证属性中使用它:

[RegularExpression(@"\A\d+(\.\d{1,2})?\Z", ErrorMessage="Please enter a numeric value with up to two decimal places.")] 
public Decimal SalePrice { get; set; } 

编辑:在回答你的两个问题:

1)这证实对提交权利,而不是当我们失去的那场焦点?

假设您添加的所有属性都是该属性,则验证是在提交时发生的。从技术上讲,一旦表单参数绑定到模型,验证就会发生。然而,实际利用这一点,你需要检查验证参数在你的控制器:

public ActionResult MyController(MyModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // do stuff 
    } 
    else 
    { 
     // Return view with the now-invalid model 
     // if you've placed error messages on the view, they will be displayed 
     return View(model); 
    } 
} 

若要验证发生除了服务器端的客户端,你需要使用JavaScript。这个使用Microsoft AJAX验证的基本示例是Scott Gu's blog

2)你能告诉我的正则表达式,其中最大项不能超过100.00分项不能低于1.00

你也许可以做到这一点的正则表达式莫名其妙,但正则表达式是不是真的设计的任何东西多于模式匹配。除了regex属性,更好的方法是添加一个范围验证属性。所以现在你的财产看起来像:

[RegularExpression(@"\A\d+(\.\d{1,2})?\Z", ErrorMessage="Please enter a numeric value with up to two decimal places.")] 
[Range(1.00m, 100.00m)] 
public Decimal SalePrice { get; set; } 

上述代码是未经测试,但一般的方法应该工作。

+0

感谢和很好的解释。我一定会尝试一下。 – VoodooChild 2010-12-05 01:32:00

1

您可以使用正则表达式字符串来验证客户端和服务器端的输入。

如果您在控制器操作上放置了RegularExpression属性,则可以使用正则表达式字符串指定该字段需要遵循的格式。通过使用该属性,您将获得客户端和服务器端验证(假设您使用的是MVC 2.0或更高版本)。

[RegularExpression("*YourRegexExpression*", ErrorMessage="You must provide a decimal value.")] 

我希望有帮助。

请参阅Scott Gu的博客文章,其中介绍了有关模型验证的更多信息。

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

迈克