Customvalidator: Проверьте, содержит ли radiobuttonlist выбранный элемент - PullRequest
0 голосов
/ 18 мая 2010

У меня есть список радиокнопок с двумя элементами: Да или Нет. Элемент управления радиобуттониста имеет настраиваемый валидатор, которому требуется функция проверки сервера и функция проверки клиента javascript. Не могли бы вы помочь мне? Функция в этом сообщении работает, но только когда я фактически выбрал один из двух элементов списка, когда элемент списка не выбран, проверка пропускает мой элемент управления radiobuttonlist.

function ValidateRadioButtonList(source, arguments) {
        var RBL = document.getElementById(source.controltovalidate);
        var radiobuttonlist = RBL.getElementsByTagName("input");
        var counter = 0;
        var atLeast = 1
        for (var i = 0; i < radiobuttonlist.length; i++) {
            if (radiobuttonlist[i].checked) {
                counter++;
            }
        }
        if (atLeast = counter) {
            arguments.IsValid = true;
            return arguments.IsValid;
        }
        arguments.IsValid = false;
        return arguments.IsValid;
    }

РЕДАКТИРОВАТЬ: Соответствующий код из комментариев

<asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="btnNormal"
      CausesValidation="True" />
<asp:CustomValidator runat="server"
      ClientValidationFunction="ValidateRadioButtonList"
      OnServerValidate="RadioButtonListServerValidation" ID="cvRadioButtonList"
      Font-Bold="True" Font-Size="Medium" ErrorMessage="Business critical"
      ControlToValidate="rblBusinessCritical">*</asp:CustomValidator>
<asp:RadioButtonList ID="rblBusinessCritical" runat="server" RepeatLayout="Flow"
      RepeatDirection="Horizontal" TabIndex="4">
    <asp:ListItem Text="Yes" Value="1" />
    <asp:ListItem Text="No" Value="0" />
</asp:RadioButtonList>

Код сзади:

Public Sub RadioButtonListServerValidation(ByVal sender As Object, _ 
            ByVal args As ServerValidateEventArgs)
    If rblBusinessCritical.SelectedValue = "-1" Then
        args.IsValid = False
        cvRadioButtonList.ErrorMessage = "Business critical needed"
        Exit Sub
    Else
        args.IsValid = True
    End If
End Sub

Ответы [ 5 ]

2 голосов
/ 18 мая 2010

Вы установили Свойство ValidateEmptyText CustomValidator в значение true?

редактировать: Вы установили свойство CausesValidation вашего Submit-Button / RadioButtonList в true? Пожалуйста, предоставьте некоторый код со страницы aspx.

0 голосов
/ 01 октября 2013
<asp:RadioButtonList ID="LocationAccurateRBL" CssClass="radioButtonList" RepeatDirection="Horizontal" RepeatColumns="4" RepeatLayout="Flow" runat="server">
                            <asp:ListItem  Text="Yes" Value="1" />
                            <asp:ListItem Text="No" Value="0" />
                        </asp:RadioButtonList>

 <asp:CustomValidator runat="server" ID="CheckBoxRequired" EnableClientScript="true" ControlToValidate="LocationAccurateRBL"
                            ClientValidationFunction="LocationAccurate_ClientValidate" ValidateEmptyText="true"
                            Text="*" ForeColor="Red" ErrorMessage="Please let us know if the location is accurate" SetFocusOnError="true" ValidationGroup="CreateVG" />

А сценарий намного короче из-за jquery. Это будет делать то, что вы хотите.

  <script>
                        function LocationAccurate_ClientValidate(sender, e) {
                            e.IsValid = $("#<%=LocationAccurateRBL.ClientID%> > input").is(':checked');
                        }                          
                    </script>
0 голосов
/ 19 декабря 2011

Это должно работать. Попытка получить контроль для проверки свойства от средства проверки клиента.

0 голосов
/ 18 мая 2010

Вам нужно использовать на стороне клиента?

Вот решение на стороне сервера ...

<asp:RadioButtonList id="radTerms" runat="server">
  <asp:listitem id="optDisagree" runat="server"  value="Disagree" selected="true">I don't agree</asp:ListItem>
  <asp:listitem id="optAgree" runat="server" value="Agree">I agree</asp:ListItem>
</asp:RadioButtonList>

<asp:CustomValidator Display="Dynamic" ErrorMessage="You have to agree to the terms and conditions" ID="cmpTerms" ControlToValidate="radTerms" SetFocusOnError="true" runat="server" OnServerValidate="cmpTermsAccepted_ServerValidate">*</asp:CustomValidator>

CodeBehind:

protected void cmpTermsAccepted_ServerValidate(Object source, System.Web.UI.WebControls.ServerValidateEventArgs args)
{
    args.IsValid = (args.Value == "Agree");
}
0 голосов
/ 18 мая 2010

Вот еще одна функция проверки клиента javascript, которую я пробовал:

function ValidateRadioButtonList(source, arguments) {
    var RBL = document.getElementById(source.controltovalidate);
    var radio = RBL.getElementsByTagName("input");
    var isChecked = false;
    for (var i = 0; i < radio.length; i++) {
        if (radio[i].checked) {
            isChecked = true;
            break;
        }
    }
    if (!isChecked) {
        alert("Please select an item");
        arguments.IsValid = false;
    }
    arguments.IsValid = true;
}
...