Передача установленных флажков контроллеру

#javascript #c# #asp.net-mvc

#javascript #c# #asp.net-mvc

Вопрос:

У меня проблема с моим js-кодом, когда я устанавливаю флажки в действии onClick(), они проверяют их все, но в элементе Inspect в разделе network я не вижу, чтобы что-то происходило.

          <table class="table table-striped grid-table" id="tableLabel">
        <tr>
            <th>Name</th>
            <th>Book</th>
            <th>
                <button type="button" class="checkall" onClick="checkAll()">select/deselect</button>
            </th>

        </tr>
@foreach (var item in (IEnumerable<cit.Models.getCheIdTip_Result>)Model)
        {
            <tr>
                <td>@item.idtip</td>
                <td>@item.tipname</td>
                <td>
                 <div class="pure-checkbox">
                 <input type="checkbox" idtip="@item.idtip" class="checktip" checked="@(item.idemployee == ViewBag.idemployee ? true : false)" name="@item.id.ToString()" id="@item.id.ToString()" />
                 <label for="@item.id.ToString()"></label>
                </div>
                </td>
            </tr>
        }
    </table>
    <input type="hidden" value="@ViewData["idemployee"]" name="idemployee" id="idemployee" class="idemployee" />
 

И вот мой js-код, как можно выбрать их все и передать контроллеру.

         var isChecked = false;
    function checkAll() {
        var checkboxes = document.getElementsByTagName('input');
        if (isChecked) {
            for (var i = 0; i < checkboxes.length; i  ) {
                if (checkboxes[i].className == 'checktip') {
                    checkboxes[i].checked = true;
                }
            }
        } else {
            for (var i = 0; i < checkboxes.length; i  ) {
                console.log(i)
                if (checkboxes[i].className == 'checktip') {
                    checkboxes[i].checked = false;
                }
            }
        }
        isChecked = !isChecked;
    }
 

Ответ №1:

вы только что использовали label там, и это заставляет вас не нажимать только на флажок. у вас должен быть js или jquery, чтобы убедиться, что вы проверили и даже сделали u. я покажу и приведу свой пример. у меня была такая же проблема по этому поводу. Я использовал пользовательский флажок и не смог отправить его на серверную часть

 <label class="custom-chk">
   <input type="checkbox">
   <span class="checkmark"></span>
</label>

$('.checkmark').click(function () {
     $(this).parents('td').toggleClass('chked')
})
 

я использовал ajax для отправки массива. Создайте массив из установленных флажков и отправьте его в серверную часть с помощью ajax.

         for (var i = 0; i < $('label').length; i  ) {
            if ($('label').eq(i).hasClass('chked')) {
                qrfid.push(
                    $('label').eq(i).attr('value')
                )
            }
        }
 

не завершайте скобки и используйте $.post или $.ajax (просто одним нажатием кнопки, с помощью которой вы хотите отправить)

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

Комментарии:

1. это не работает в моем решении, можете ли вы написать пример для моего кода?

Ответ №2:

     @foreach (var item in (IEnumerable<cit.Models.getCheIdTip_Result>)Model)
{
    <tr>
        <td>@item.idtip</td>
        <td>@item.tipname</td>
        <td>
            <div class="pure-checkbox" idtip="@item.idtip">
                <input type="checkbox"  class="checktip" id="@item.id.ToString()" />
                <label for="@item.id.ToString()"></label>
            </div>
        </td>
    </tr>
}

<script>
    $('.pure-checkbox').click(function () {
        $(this).parents('td').toggleClass('chked')
    })

    var wantedids = []

    $("#yoursubmitbutton").click(function () {
        for (var i = 0; i < $('.pure-checkbox').length; i  ) {
            if ($('.pure-checkbox').eq(i).parents('td').hasClass('chked')) {
                wantedids.push(
                    $('.pure-checkbox').eq(i).attr('idtip')
                )
            }
        }
        $.post("your url", { nameofC#variable: wantedids, nameofC#variable : $('#idofelement') },

        )
    })

</script>
 

idk, если ваш div будет иметь класс chkd, это может испортить ваш код. поэтому я добавил его в тег td. но div также можно сделать. вы отправите все с помощью ajax. и вам не понадобится тег формы, имя attrs в тегах.

а также я видел, как вы пытались сказать, что установите флажок, если выполняется следующее условие. но вы можете использовать @if

 @foreach (var fenn in ViewBag.Fenn.Rows)
        {
            bool p = true;
            <span>@fenn["FennAd"]</span>
            foreach (var kfenn in ViewBag.QrFennInfo.Rows)
            {
                if (kfenn["FennID"] == fenn["FennID"])
                {
                    <label value="@fenn["FennID"]" class="custom-chk chked">
                        <input type="checkbox" checked="">
                        <span class="checkmark"></span>
                    </label>
                    <div hidden>@(p = false)</div>
                }
            }
            if (p)
            {
                <label value="@fenn["FennID"]" class="custom-chk">
                    <input type="checkbox">
                    <span class="checkmark"></span>
                </label>
            }
        }
 

у меня было так. я не использовал здесь английский. я только что использовал viewbag и попросил его использовать double for и 1 if для проверки проверенных данных sql. я имею в виду, что у меня была таблица для уроков и таблица для групп. а также таблица для их комбинаций.

Комментарии:

1. Это не работает для меня, myb мне нужно было бы сделать что-то еще, с помощью jquery.

2. надеюсь, вы не просто скопировали и вставили части, которые я показал для вас: D. я только что показал вторую, чтобы вы поняли идею использования if и checked=» »