Использование ASP:CompareValidator для сравнения ASP:DropDownList с литеральным значением

Мы реализуем ASP:CompareValidator, и он не работает, как мы ожидали.

На форме есть ASP:DropDownList, где один из элементов в DropDown:

<Please select a class>

Этот текст также включает угловые скобки.

Мы хотим убедиться, что пользователь выбирает что-то из DropDown, поэтому мы не хотим, чтобы данные сохранялись, пока DropDown показывает:

<Please select a class>

Можете ли вы проверить мою разметку и сообщить мне, почему появляется сообщение об ошибке проверки, когда пользователь нажимает кнопку Обновить?

<asp:TemplateField HeaderText="Class:">
    <EditItemTemplate>
        <asp:DropDownList 
            ID="DropDownListClass" 
            Runat="server"
            DataSourceID="SqlDataSourceClasses"
            DataTextField = "ClassName"
            DataValueField="ID"
            SelectedValue='<%# Bind("ClassID") %>'
            ForeColor="Blue">
        </asp:DropDownList>

        <asp:CompareValidator 
            runat="server" 
            id="ClassMustBeSelected" 
            controltovalidate="DropDownListClass" 
            ValueToCompare="<Please select a class>"
            operator="Equal" 
            type="String" 
            errormessage="Please select a class!">
        </asp:CompareValidator>
    </EditItemTemplate>
</asp:TemplateField>

Значения для DropDown взяты из этого источника данных:

<asp:SqlDataSource 
    ID="SqlDataSourceClasses" 
    runat="server" 

    ConnectionString="<%$ ConnectionStrings:Knowledge Academy %>" 

    SelectCommand=
        "SELECT '' AS ID, '<Please select a class>' AS ClassName, '' AS Grade
   UNION SELECT ID, ClassName + ' *** Grade: ' + Grade AS ClassName, Grade 
           FROM Classes
       ORDER BY 2, 3">
</asp:SqlDataSource>

1 ответ

Поля, которые должны иметь значение в них перед отправкой формы, должны использовать обязательный валидатор полей.

http://msdn.microsoft.com/en-us/library/e78xxk8k(v=VS.71).aspx

Обратите внимание на следующее от Microsoft

Примечание. Если элемент управления вводом пуст, никакие функции проверки не вызываются и проверка завершается успешно. Используйте элемент управления RequiredFieldValidator, чтобы запретить пользователю пропускать элемент управления вводом.

Таким образом, вам нужен как обязательный валидатор поля, так и валидатор сравнения, чтобы это работало (хотя обычно просто оставляют список пустым (невыбранным) и используют обязательный валидатор поля, как правило, то, что сделано.

Другие вопросы по тегам