2010-12-04 92 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

邁克