0

ASP.NET MVC 3 Webサイトがあります。特定のページで、テーブルにdatatables.netプラグインを使用しました。表の左側にあるチェックボックスをマークアップに含めました。クリックすると行が強調表示されます。ユーザーは複数の行を選択できます。ユーザーがボタンをクリックすると、クリックされたすべての行のIDをコントローラーに渡して、DBで作業を行います。

コントローラ内のデータを簡単に逆シリアル化できるように、IDをJSON形式で返したいです。

これまでのところ、これは私も持っています。

$('#UseCars').click(function (event) {

    var cars = new Array();

    carsTable.find("tr input:checkbox").each(function () {

        var car = new Object();
        //alert($(this).attr("CarID"));
        car.ID = $(this).attr("CarID");
        //alert(car.ID);

        cars.push(car);

    });

    var jsonstring = $.toJSON(cars);

    $('#CarsList').val(jsonstring);

});

したがって、私のcshtmlには、モデルの文字列であるCarsListの非表示があります。UseCarsボタンが呼び出すコントローラーのメソッドにブレークポイントを設定すると、model.CarsListの値が表示されます。CarsListはjstrong文字列ですが、テーブル内のすべてのチェックボックスが検出され、特定のチェックボックスは検出されず、プルされません。行のID値も出力されます。

私がここで見逃しているものを誰かが見ることができますか?

CSHTMLマークアップを含めるように編集

これが、テーブルのページにあるマークアップです。

   <table id="carsTable" style="margin-left: 2px; width: 200px">
                            <thead>
                                <tr>
                                    <th class="ui-widget-header">
                                        <input id="SelectAll" type="checkbox" />
                                    </th>
                                    <th class="ui-widget-header table-header">
                                    </th>
                                    <th class="ui-widget-header table-header">
                                        Age of Car (Years)
                                    </th>
                                    <th class="ui-widget-header table-header">
                                        Car Name
                                    </th>
                                </tr>
                            </thead>
                            <tbody>
                                @foreach (var item in Model.CarList)
                                {
                                    <tr>
                                        <td class="table-data">
                                            <input id="SelectIndividual" name="Select" type="checkbox" />
                                        </td>
                                        <td id="InvoiceId">
                                            @Html.DisplayFor(modelItem => item.CarID)
                                        </td>
                                        <td class="table-data">
                                            @Html.DisplayFor(modelItem => item.CarAge)
                                        </td>
                                        <td class="table-data">
                                            @Html.DisplayFor(modelItem => item.CarName)
                                        </td>
                                    </tr>
                                }
                            </tbody>
                        </table>

次に、DataTableテーブル構成のページのjsファイルで、ID列がbvisible:falseに設定されているため、実際にはユーザーに表示されません。Danielが述べたようにidselectを変更したので、次のようになります--car.ID = $(this).next( "CarId");

コントローラのブレークポイントで、情報が返されることがわかりますが、期待したものとは異なります。つまり、文字列が[{123}、{124}]のようになることを期待していましたが、代わりに次のような出力が得られます。

"[{\"ID\":{\"length\":0,\"prevObject\":{\"0\":{\"jQuery183036556275907670765\":227},\"context\":{\"jQuery183036556275907670765\":227},\"length\":1},\"context\":{\"jQuery183036556275907670765\":227},\"selector\":\".next(CarId)\"}}]"
4

2 に答える 2

1

次のセレクターで試してください$("td input:checked")

$("td input:checked").each(function (index, para) {
    var car = new Object();
    //alert($(this).attr("CarID"));
    car.ID = $(this).attr("CarID");
    //alert(car.ID);

    cars.push(car);
});

さらに良いのは、テーブルIDも使用することです。$("#myTableId td input:checked").each...

于 2012-12-24T13:13:40.153 に答える
0

交換

carsTable.find("tr input:checkbox").each(function () {

carsTable.find("tr input:checked").each(function () {

jquery/js デバッガーは信頼性が低く、代わりに console.log() を使用します

于 2012-12-24T13:14:48.333 に答える