Как я могу проверить, что все флажки в повторителе отмечены - PullRequest
0 голосов
/ 04 июля 2018

У меня есть форма, которая извлекает необходимый текст соглашения из базы данных и отображает каждое активное условие соглашения в виде отдельного флажка в повторителе. Мне нужно проверить, что ВСЕ флажки в повторителе проверены перед отправкой формы. Есть ли способ сделать это, или я должен пойти по-другому, чем то, что я начал ниже?

В настоящее время у меня есть CustomValidator, но он требует только, чтобы был установлен хотя бы один из флажков.

<h1>Agreements</h1>
        <asp:Repeater ID="rptAgreements" runat="server">
            <HeaderTemplate>
                <table>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td valign="top" style="padding:10px;">
                        <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="*" ClientValidationFunction = "ValidateCheckBox"></asp:CustomValidator>
                        <asp:CheckBox ID="Agreements" value='<%# Eval("AgreementID") %>' runat="server" ClientIDMode="Static" />
                    </td>
                    <td style="padding:10px;">
                        <asp:Label ID="lblAgreementText" runat="server" Text='<%# Eval("AgreementText") %>' />
                    </td>
                </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table>
            </FooterTemplate>
        </asp:Repeater>

<script type = "text/javascript">
    function ValidateCheckBox(sender, args) {
        if (document.getElementById("Agreements").checked == true) {
            args.IsValid = true;
        } else {
            args.IsValid = false;
        }
    }
</script> 

Код сзади:

try
    {
        using (SqlConnection con = new SqlConnection(FormConnstring))
        {
            using (SqlCommand cmd = new SqlCommand("sp_SelectAgreements", con))
            {
                using (SqlDataAdapter agreeDS = new SqlDataAdapter(cmd))
                {
                    cmd.CommandType = CommandType.StoredProcedure;
                    DataTable dt = new DataTable();
                    agreeDS.Fill(dt);
                    rptAgreements.DataSource = dt;
                    rptAgreements.DataBind();
                }
            }
        }
    }

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Вы можете использовать класс и использовать один customValidator для ваших целей. Так что ваш код будет выглядеть примерно так:

<h1>Agreements</h1>
    <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="*" ClientValidationFunction = "ValidateCheckBoxes"></asp:CustomValidator>
    <asp:Repeater ID="rptAgreements" runat="server">
        <HeaderTemplate>
            <table>
        </HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td valign="top" style="padding:10px;">                        
                    <asp:CheckBox ID="Agreements" value='<%# Eval("AgreementID") %>' runat="server" ClientIDMode="Static" CssClass="Agreement"/>
                </td>
                <td style="padding:10px;">
                    <asp:Label ID="lblAgreementText" runat="server" Text='<%# Eval("AgreementText") %>' />
                </td>
            </tr>
        </ItemTemplate>
        <FooterTemplate>
            </table>
        </FooterTemplate>
    </asp:Repeater>

<script type = "text/javascript">
function ValidateCheckBoxes(sender, args) {
    if ($('input.Agreement').not(':checked').length == 0) {
        args.IsValid = true;
    } else {
        args.IsValid = false;
    }
}

0 голосов
/ 04 июля 2018

Вы назначаете ClientIDMode = "Static" в своем коде, который будет генерировать повторяющиеся идентификаторы в Html, и это не является действительным html.

Вы можете назначить класс для своих флажков, а в JS подсчитать флажки соглашения и выбранные, а затем сравнить их. например, ниже:

<input type="checkbox" class="agreement" value="1"> agreement 1
<input type="checkbox" class="agreement" value="2"> agreement 2
<input type="checkbox" class="agreement" value="3"> agreement 3
<input type="checkbox" class="agreement" value="4"> agreement 4
<input type="submit" value="GO" id="btn" />

$('#btn').click(function(){
  var chkAll=$('input.agreement').length;
  var chkSelected = $('input.agreement:checked').length;
  alert(chkAll==chkSelected);
});
...