Проверка или ввод в двух текстовых полях - ASP.NET Webforms

1

У меня два поля текстового поля на странице регистрации, и я пытаюсь настроить либо тип проверки, либо тип проверки. Валидация должна начинаться, когда оба поля пусты, говоря, что вы должны ввести любое из полей A или B для регистрации.

Я использовал пользовательский валидатор, как показано ниже, в моем коде, но он, похоже, не работает. Я ищу умный способ проверки этих 2 текстовых полей. Часть валидации на стороне сервера: когда я ее протестировал, точка останова никогда не срабатывает. Может кто-то предложить чистый способ сделать это.

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

<div class="form-group">
                            <asp:Label Text="" ID="lblSCGrantNumber" runat="server" AssociatedControlID="txtStateCommGrantNumber">
                                 State Commission Number&nbsp;
                            </asp:Label>
                            <asp:TextBox ID="txtStateCommGrantNumber" runat="server" TextMode="SingleLine" placeholder="State Commission Grant Number" AutoCompleteType="None" class="form-control"></asp:TextBox>
                           <%-- <asp:RequiredFieldValidator Display="Dynamic" ID="rfStateCommGrantNumber" Text="Required" SetFocusOnError="true" CssClass="text-danger" ControlToValidate="txtStateCommGrantNumber" runat="server"></asp:RequiredFieldValidator>--%>
                          <asp:CustomValidator ID="stateCommissionGrants" runat="server" OnServerValidate="ServerValidation" OnClientValidate="Validate_textboxes" ControlToValidate="txtStateCommGrantNumber" ErrorMessage="One of the two fields is required" ValidateEmptyText="true"></asp:CustomValidator>
                        </div>

                           <div class="form-group">
                            <asp:Label Text="" ID="lblGrantNumber" runat="server" AssociatedControlID="txtStateCommGrantNumber">
                                 Grant Number&nbsp;
                            </asp:Label>
                            <asp:TextBox ID="txtGrantNumber" runat="server" TextMode="SingleLine" placeholder="Grant Number" AutoCompleteType="None" class="form-control"></asp:TextBox>
                            <%--<asp:RequiredFieldValidator Display="Dynamic" ID="rfStateCommGrantNumber" Text="Required" SetFocusOnError="true" CssClass="text-danger" ControlToValidate="txtStateCommGrantNumber" runat="server"></asp:RequiredFieldValidator>--%>
                            <asp:CustomValidator ID="grants" runat="server" OnServerValidate="ServerValidation" OnClientValidate="Validate_textboxes" ControlToValidate="txtGrantNumber" ErrorMessage="One of the two is required" ValidateEmptyText="true"></asp:CustomValidator>
                             </div>

Клиентский код:

<script type="text/javascript">
        (function Validate_textboxes(sender, args) {
            var v = document.getElementById('<%=txtStateCommGrantNumber.ClientID%>').value;
            var v = document.getElementById('<%=txtGrantNumber.ClientID%>').value;
            if (v == '') {
                args.IsValid = false;
            }
            else {

            }


        });

Код сервера:

protected void ServerValidation(object source, ServerValidateEventArgs args)
        {
            args.IsValid = txtStateCommGrantNumber.Text.Trim().Length > 0 || txtGrantNumber.Text.Trim().Length > 0;
            if (!args.IsValid)
            {
                CustomValidator customvalidator = new CustomValidator();
                customvalidator.IsValid = false;
                customvalidator.ErrorMessage = "TextBox1 and TexBox2 can't both be empty";
                Page.Form.Controls.Add(customvalidator);
            }
        }
Теги:
validation

1 ответ

0
Лучший ответ

Вы должны использовать атрибут ClientValidationFunction элемента управления CustomValidator. И в функции javascript вы должны установить свойство args.IsValid в true или false. Например:

<asp:Textbox id="text1" runat="server" text=""></asp:Textbox>
<asp:Textbox id="text2" runat="server" text=""></asp:Textbox>
<asp:CustomValidator id="CustomValidator1" runat="server" 
  ControlToValidate = "text1"
  ErrorMessage = "Required"
  ClientValidationFunction="validate" >
</asp:CustomValidator>

И Javascript:

<script type="text/javascript">
  function validate(oSrc, args){
            var v1 = document.getElementById('<%=text1.ClientID%>').value;
            var v2 = document.getElementById('<%=text2.ClientID%>').value;
            if (v1 == '' && v2 == '') {
                args.IsValid = false;
            }
            else {
               args.IsValid = true;
            }
}
</script>

Изменить. Если текстовое поле пуст, это может не вызвать событие проверки. Чтобы преодолеть это, вы можете добавить атрибут ValidateEmptyText="true" к настраиваемому валидатору или можете использовать отдельный обязательный полевой валидатор для проверки пустых значений.

  • 0
    @M Idrees: я попробовал ваш подход, но клиентская сторона не сработала. ни сторона сервера в этом случае.
  • 0
    Может кто-нибудь предложить другой подход?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню