RangeAttribute数据注释未按预期工作

时间:2010-11-01 01:52:46

标签: c# asp.net-mvc-2 data-annotations

我正在开发一个ASP.NET MVC2应用程序,其中我有一个User类,其中包含一个名为SecurityQuestionID的属性,如下所示:

 public class User
    {
        [RangeAttribute(1, 5, ErrorMessage = "Security Question is required")]
        [DisplayName("Security Question")]
        public virtual int SecurityQuestionID { get; set; }
    }

SecurityQuestionID字段从视图中的下拉列表中填充,如下所示:

    <%: Html.LabelFor(model => model.SecurityQuestionID)%>
    <%: Html.DropDownListFor(model => model.SecurityQuestionID, ViewData["securityQuestions"] as SelectList,"Choose a Question",null) %>
    <%: Html.ValidationMessageFor(model => model.SecurityQuestionID)%>

控制器使用视图数据将安全问题发送到视图,如下所示:

ViewData["securityQuestions"] = new SelectList(_securityQuestionService.GetAll(), "SecurityQuestionID", "Question");

如果我没有从下拉列表中选择问题并点击提交按钮,则需要显示安全问题字段。消息显示而不是需要安全问题。可以有谁帮我理解我在这里做错了什么?

2 个答案:

答案 0 :(得分:4)

如果整数不可为空,则默认情况下需要它。因此范围验证不会失败,但必需的验证失败 您可能希望通过添加必需属性来指定单独的错误消息。

[Required(ErrorMessage="Security Question is required")]

答案 1 :(得分:2)

它可能会抛出该错误,因为它是必填字段。见http://forums.asp.net/p/1391688/2977493.aspx。这与以下事实一致:相关字段定义为int,而不是int?,因此不能假设null值。

换句话说,它没有达到您的范围验证器。