RequiredFieldValidator всегда недействителен

У меня есть три элемента управления RequiredFieldValidator в форме (для раскрывающегося списка и текстовых полей), и они всегда делают страницу недействительной, даже если пользователь вводит данные!

<div class="control-group">
            <asp:Label ID="HouseTypeLabel" runat="server" Text="Type of home" class="control-label asterisk" meta:resourcekey="HouseTypeLabelResource1"></asp:Label>
            <div class="controls">
                <asp:DropDownList ID="HouseType" runat="server" meta:resourcekey="HouseTypeResource1">
                    <asp:ListItem Value="" Text="please select" meta:resourcekey="ListItemResource1"></asp:ListItem>
                    <asp:ListItem Value="1" Text="rancher" meta:resourcekey="ListItemResource2"></asp:ListItem>
                    <asp:ListItem Value="2" Text="two-storey" meta:resourcekey="ListItemResource3"></asp:ListItem>
                    <asp:ListItem Value="3" Text="bi-level" meta:resourcekey="ListItemResource4"></asp:ListItem>
                    <asp:ListItem Value="4" Text="bungalow" meta:resourcekey="ListItemResource5"></asp:ListItem>
                    <asp:ListItem Value="5" Text="bungalow + basement" meta:resourcekey="ListItemResource6"></asp:ListItem>
                </asp:DropDownList>
                <p class="help-block">
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="HouseType" runat="server" EnableClientScript="False" ErrorMessage="Please indicate type of home" meta:resourcekey="RequiredFieldValidator1Resource1"></asp:RequiredFieldValidator>
                </p>
            </div>
</div>
<div class="control-group">
            <asp:Label ID="TotalBedroomsLabel" runat="server" Text="Total number of bedrooms" class="control-label asterisk" AssociatedControlID="TotalBedrooms" meta:resourcekey="TotalBedroomsLabelResource1"></asp:Label>
           <div class="controls">
              <asp:TextBox ID="TotalBedrooms" runat="server" class="input-xlarge" placeholder="" meta:resourcekey="TotalBedroomsResource1"></asp:TextBox>
            <p class="help-block">
                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" ControlToValidate="TotalBedrooms" EnableClientScript="False" runat="server" ErrorMessage="Please enter total number of bedrooms" meta:resourcekey="RequiredFieldValidator2Resource1"></asp:RequiredFieldValidator>
            </p>
          </div>
</div>
<div class="control-group">
            <asp:Label ID="TotalBathroomsLabel" runat="server" Text="Total number of bathrooms" class="control-label asterisk" AssociatedControlID="TotalBathrooms" meta:resourcekey="TotalBathroomsLabelResource1"></asp:Label>
           <div class="controls">
              <asp:TextBox ID="TotalBathrooms" runat="server" class="input-xlarge" placeholder="" meta:resourcekey="TotalBathroomsResource1"></asp:TextBox>
            <p class="help-block">
                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" EnableClientScript="false" runat="server" ControlToValidate="TotalBathrooms" ErrorMessage="Please enter total number of bathrooms" meta:resourcekey="RequiredFieldValidator3Resource2"></asp:RequiredFieldValidator>
            </p>
          </div>
</div>

Поэтому не имеет значения, ввожу ли я данные или ничего не ввожу, когда я нажимаю кнопку отправки, отображаются три сообщения об ошибках.

Любые идеи? Спасибо.

РЕДАКТИРОВАТЬ: кнопка отправки находится ниже

<div class="control-group">
<!-- Button -->
<div class="controls">
    <asp:Button ID="SubmitButton" runat="server" Text="Save and Next" class="btn btn-info" meta:resourcekey="SubmitButtonResource1" OnClick="SubmitButton_Click" />
</div>


person nomad    schedule 22.04.2013    source источник
comment
Что произойдет, если вы удалите meta:resources на валидаторах (просто для тестирования)?   -  person Yeronimo    schedule 22.04.2013
comment
Вы можете отлаживать? постбэк срабатывает?   -  person Roar    schedule 22.04.2013
comment
Постбэк срабатывает, удаление meta:resources ничего не делает.   -  person nomad    schedule 22.04.2013
comment
Закройте визуальную студию и начните заново. Просто подумал!   -  person rach    schedule 22.04.2013
comment
Оказывается все работает нормально. Происходило то, что у меня была форма, предварительно заполненная данными о Page_Load(), и перед заполнением я не использовал if(!Page.IsPostBack){ /* populate fields here*/ }. Итак, до того, как мой SubmitButton_Click() сработал, поля были перезаписаны старыми (и в моем случае пустыми) значениями. Вот почему элементы управления RequiredFieldValidator будут срабатывать. Спасибо всем за участие.   -  person nomad    schedule 22.04.2013
comment
Сколько форм у Вас есть? Вы уверены, что у вас только одна форма на одной странице? Или у вас много формы? на одной странице? Пожалуйста, приложите 3 сообщения об ошибке. Если на странице много форм, используйте группу проверки.   -  person toha    schedule 18.02.2016


Ответы (5)


Вам не хватает атрибута ValidationGroup для обязательных валидаторов полей.

<asp:RequiredFieldValidator ID="RequiredFieldValidator2"  
                            ControlToValidate="TotalBedrooms" 
                            runat="server" 
                            ErrorMessage="Please enter total number of  bedrooms" 
                            ValidationGroup="vgSave">      // add this for all your required field validators and also the button event that invokes them
</asp:RequiredFieldValidator>

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

person Praveen Nambiar    schedule 22.04.2013
comment
Я добавил ValidationGroup="vgSave", как вы упомянули, но ничего не сделал. - person nomad; 22.04.2013

Вероятно, слишком поздно для оригинального плаката, но на случай, если у кого-то еще возникнет такая же проблема:

Сегодня я провел час, разочаровываясь в том, почему, казалось бы, правильный RequiredFieldValidator всегда возвращал false в Visual Studio 2012.

Я попытался перезапустить VS и очистить/перестроить, ничего не работало.

В конце концов, я переименовал идентификатор целевого элемента управления TextBox и указал RequiredFieldValidator на новое имя. Это сработало немедленно.

Я полагаю, одна из тех «особенностей» VS.

Я предполагаю, что что-то перепуталось в автоматически сгенерированном коде для старого объекта RequiredFieldValidator или что-то в этом роде, но я никогда не углублялся в это.

person Nathan Power    schedule 06.09.2013

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

Теперь я разместил этот пользовательский элемент управления два раза на странице и показывал только один из них за раз.

Результатом этого было то, что видимый ValidationSummary показал ошибки из обоих элементов управления, поэтому, даже если текущий видимый пользовательский элемент управления был действительным, это привело к сообщениям об ошибках в ValidationSummary.

person Peter    schedule 08.08.2014

Измените эту часть кода:

<asp:DropDownList ID="HouseType" runat="server" meta:resourcekey="HouseTypeResource1">
                    <asp:ListItem Value="" Text="please select" meta:resourcekey="ListItemResource1"></asp:ListItem>

          ....
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="HouseType" runat="server" EnableClientScript="False" ErrorMessage="Please indicate type of home" meta:resourcekey="RequiredFieldValidator1Resource1"></asp:RequiredFieldValidator>

Чтобы быть таким:

<asp:DropDownList ID="HouseType" runat="server" meta:resourcekey="HouseTypeResource1">
                    <asp:ListItem Value="-1" Text="please select" meta:resourcekey="ListItemResource1"></asp:ListItem>
                    <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="HouseType" InitialValue="-1"  runat="server" EnableClientScript="False" ErrorMessage="Please indicate type of home" meta:resourcekey="RequiredFieldValidator1Resource1"></asp:RequiredFieldValidator>

Я думаю, вы должны указать значение по умолчанию.

<asp:ListItem Value="-1" Text="please select" meta:resourcekey="ListItemResource1"></asp:ListItem>

Поэтому выделите эту часть: Value="-1"

и в asp:RequiredFieldValidator вы должны указать InitialValue

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="HouseType" InitialValue="-1"  runat="server" EnableClientScript="False" ErrorMessage="Please indicate type of home" meta:resourcekey="RequiredFieldValidator1Resource1"></asp:RequiredFieldValidator>

Повторите попытку, и если этот ответ не работает, дайте мне знать.

person toha    schedule 07.05.2015

вам следует попробовать удалить EnableClientScript="false" из тега asp.net.

person Toan Vo    schedule 22.04.2013
comment
Нет, я не хочу, чтобы происходила проверка на стороне клиента. Хотя спасибо за идею. - person nomad; 22.04.2013