Reqular Expression在ASP.NET MVC2应用程序中不起作用

时间:2013-02-02 06:58:03

标签: regex asp.net-mvc-2

我有一个包含验证规则数量的模型:

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

2 个答案:

答案 0 :(得分:2)

你的正则表达式应为:

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

编辑:

然而,你真正的问题是你没有正确地做事。您在模型中使用int类型。但是你在Post动作中使用FormCollection。 FormCollection绕过模型绑定器,并为您提供输入的内容。

您应该使用模型绑定您的值,并且您应该在模型中将其设置为可为空的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
    }
}

答案 1 :(得分:1)

确保您的元素包含在html.beginform标记内。仅当您的控件位于&lt; form&gt;内时,验证才有效元件。