2013-02-02 53 views
0

我有一個驗證規則的數量模型:Reqular表達不ASP.NET MVC2應用工作

[Required(ErrorMessage = "Number must be enter")] 
    [RegularExpression("^[0-9]{1,10}$", ErrorMessage = "Your must be enter only integer number between 0-10 simvols")] 
    public int Number 
    { 
     get { return number; } 
     set { number = value; } 
    } 

所以我的驗證不幹活檢查我的代碼,但找不到在哪裏我做錯誤。 這是我的看法模板的一部分:

<% using (Html.BeginForm()) 
    {%> 
<%: Html.ValidationSummary(true) %> 
<div class="editor-label"> 
    <p class="number"> 
     Enter number</p> 
    <%: Html.TextBoxFor(model => model.Number, new {@class = "txtNumber"})%> 
    <%: Html.ValidationMessageFor(model => model.Number) %> 
</div> 
<p> 
    <input type="submit" value="Calculate" class="button" /> 
</p> 
<% } %> 
+0

你確定它不工作?你是否在你的post方法中檢查ModelState.IsValid? –

+0

是的,我確定,請看這個視頻:http://screencast.com/t/6vS1X12c9Sak –

+0

你爲什麼這樣做呢?您應該使用模型綁定方法。如果你讓Number是一個可爲空的int,那麼不是FormCollection有'int? Number「,然後該值將被自動綁定並轉換爲int。您可以添加一個範圍驗證,以確保它落在正確的範圍內。 –

回答

2

你的正則表達式應該是這樣的:

"^([0-9]|10)$" 

編輯:

你真正的問題,不過是你沒有正確地做事。您在模型中使用了一個int類型。但是,你在Post操作中使用了FormCollection。 FormCollection繞過模型聯編程序,併爲您提供任何鍵入的內容。

您應該改爲模型綁定您的值,並且您應該將它設置爲模型中的一個可爲null的int值。原因是int是一個值類型,不能爲null。因此,它必須包含一個值,在輸入文本的情況下,該值表示該值爲0,並且由於0通過驗證,所以ModelState.IsValid將返回true。在你的操作方法

[Required(ErrorMessage = "Number must be enter")] 
[Range"^[0-9]{1,10}$", 
    ErrorMessage = "Your must be enter only integer number between 0-10 simvols")] 
public int? Number {get;set;} 

然後:

相反,這樣做

public ActionResult Index(MyModel model) { 
    if (ModelState.IsValid) { 
     // model.Number is now an integer already, and IsValid will be false for no number 
    } 
} 
+0

Mystere Man,爲什麼?我測試了我的exprssion,我確定它的工作原理 –

+0

@ElvinArzumanoğlu - 因爲您的正則表達式不會驗證1-10錯誤消息中的數字。它是0-9,1-10次的任何數字。 –

+0

@ElvinArzumanoğlu - 請參閱更新,也請注意,如果您打算使用10位數字,那麼您會在'2,147,483,647'之後溢出'int',這會導致您遇到問題 –

1

確保您的元素包裹html.beginform標籤內。驗證僅在您的控件位於<表單>元素內時纔有效。

+0

謝謝Hitesh.Aneja。我知道這一點,我寫了html.beginform。但沒有任何事情發生。 –

+0

我改變了我的代碼,請看看。 –