我正在开发一个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");
如果我没有从下拉列表中选择问题并点击提交按钮,则需要显示安全问题字段。消息显示而不是需要安全问题。可以有谁帮我理解我在这里做错了什么?
答案 0 :(得分:4)
如果整数不可为空,则默认情况下需要它。因此范围验证不会失败,但必需的验证失败 您可能希望通过添加必需属性来指定单独的错误消息。
[Required(ErrorMessage="Security Question is required")]
答案 1 :(得分:2)
它可能会抛出该错误,因为它是必填字段。见http://forums.asp.net/p/1391688/2977493.aspx。这与以下事实一致:相关字段定义为int
,而不是int?
,因此不能假设null
值。
换句话说,它没有达到您的范围验证器。