Search code examples
c#asp.net-mvc-2data-annotations

RangeAttribute Data Annotation Not Working as Expected


I am developing an ASP.NET MVC2 application in which I have a User class with a property named SecurityQuestionID as follows:

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

The SecurityQuestionID field gets populated from a dropdown in the view as follows:

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

The controller sends the security questions to the view by using view data as follows:

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

If I don't select a question from the dropdown and hit the submit button, then "The Security Question field is required." message is displayed instead of "Security Question is required". Can anyone help me understand what I am doing wrong here?


Solution

  • If the integer is not nullable, then it is required by default. So the range validation isn't failing but Required validation is failing.
    You may want to specify a separate error message for when it is required by adding a required attribute.

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