0

コードなしで説明する言葉が見つからないので、これまでに得たものは次のとおりです。

表示: (ブートストラップ スイッチ)

[...]
    @foreach (var item in Model)
                {
                    <tr>
                        <td>
                            <input class="my-checkbox" type="checkbox" name="my-checkbox" id="@(item.Id)" data-handle-width="100" data-on-text="Activer" data-off-text="Désactiver" data-size="small" data-on-color="success">
                        </td>
                    </tr>
                }
[...]
    <script type="text/javascript">
        var isEnableUrl = '@Url.Action("IsEnabledMaterial", "MaterialType")';
        $("[name='my-checkbox']").bootstrapSwitch();
    </script>

Javascript:

$(document).ready(function () {
    $('.my-checkbox').each(function (index) {
        $.ajax({
            type: 'POST',
            url: isEnableUrl,
            data: { 'id': index },
            success: function (result) {
                $('.my-checkbox').prop('checked', result);
            },
            error: function (e) {
                swal("Error", "Can't modify that element. ", "error");
            }
        });
    });
});

次に、私のコントローラー:

[HttpPost]
public virtual bool IsEnabledMaterial(int id)
{
     var materialType = materialTypeRepository.GetById(id);
     return materialType.Enable;
}

基本的に、私がやろうとしているのは、ページの読み込み時です。すべての「スイッチ」が作成されたら、データベースを調べて、どのスイッチが true または false でなければならないかを確認し、それらを次のように設定します。正しい値...

しかし、それをしようとすると、id = 0 のときに NullReferenceException が発生します。これは正常なことだと思います。私のデータベースでは、id が 1、2、3、4 であるためです。 id、id = 4のときに同じエラーが発生します。いずれの場合も、trueに切り替わることはありません(DBではすべてtrueです)。手動で(.eachなしで)実行した場合にのみ機能します(ID 1-2-3の場合)、id:0-4はまだ私が望むことを実行できません。

それはforeachと一緒でしょうか?「@(item.Id + 1)」という ID を渡そうとしましたが、それでも 1 回 0 を取得したためです...

助けてくれてどうもありがとう!

4

1 に答える 1

1

少なくとも 3 つの問題があります。

  1. 入力へのIDは数字で始まります。技術的には、ID は数字で始めるべきではありません。に変更してみてください

<input class="my-checkbox" type="checkbox" name="my-checkbox" id="@("chkBox" + item.Id)" data-handle-width="100" data-on-text="Activer" data-off-text="Désactiver" data-size="small" data-on-color="success">

  1. あなたの主な問題は

$('.my-checkbox').prop('checked', result);

これにより、class="my-checkbox" を含むすべての入力が ajax 呼び出しの最後の結果に変更されます。あなたはそれをに変更したいかもしれません

$('#chkBox' + index).prop('checked', result);
  1. この実装では ajax 呼び出しが多すぎるため、パフォーマンスの問題が発生します。
于 2015-11-12T04:51:14.640 に答える