我有一个包含验证规则数量的模型:
[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 :(得分: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;内时,验证才有效元件。