0

私は検証ルールの数を持つモデルを持っています:

[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>
<% } %>
4

2 に答える 2

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
    }
}
于 2013-02-04T06:24:36.213 に答える
1

要素がhtml.beginformタグ内にラップされていることを確認してください。検証は、コントロールが<form>要素内にある場合にのみ機能します。

于 2013-02-02T07:15:19.170 に答える