0

私はMVC3とhtmlヘルパーでtablesorterを使用して、オブジェクト内のアイテムを通過するforeachループ内の列にデータを入力しています。これは正常に機能しており、私のhtmlテーブルは希望どおりに入力されています。しかし、テーブルの2番目の列である従業員名の並べ替えに問題があります。これは次のようになります。

                <td class="reviewedEmployee">
                    @Html.TextBox("Employees", item.FirstName + "  " + item.LastName, new { style = "width:auto !important; text-align:center;" })
                </td>

テーブルソーターを使用するように正しくフォーマットされている「従業員」タイトルをクリックしても、ソートは行われません。しかし、「List of Reviewers」(選択リストの@ Html.ListBox)などの別の列をクリックすると、その列で並べ替えられます。「従業員」のタイトルに戻ると、変更が加えられますが、アルファベット順ではありません(名+姓)。2011年または2012年のいずれかを表示する最初の列「Year」でも並べ替えは機能しません。

これが私のJSです:

    $(document).ready(function () {
        $('table.tablesorter').tablesorter({ textExtraction: 'complex' })
          .tablesorterPager({ container: $("#pager"), size: $(".pagesize option:selected").val() });
});

「Employee」列のデータのスペースを削除しようとしましたが、tablesorterから「textExtaction」プロパティを削除しました。他のアイデアはありますか?

更新:テーブル内のデータは入力タグであるため、おそらくtablesorter.AddParser()メソッドを追加して、入力タグ内のセル.val()を返すことにより、値で並べ替える方法を見つける必要があります。

4

1 に答える 1

0

Razor ビューでレンダリングされた入力タグを使用する代わりに、HTML ヘルパーを使用して、データベースから名字と姓を取得しました。これは、表に未加工のテキストとして表示されます。何らかの理由で、tablesorter は入力のある行をソートできませんでした。

修正:表示フィールドの値として設定された値と同じに非表示フィールドを追加します。

私の修正: Raw Text を取得した後、独自のカスタム パーサー設定を実装して、姓で列を並べ替えました。

    $.tablesorter.addParser({
    id: "lastName",
    is: function (s) {
        return false;
    },
    format: function (s) {
        ret = s.split(' ');
        return ret[ret.length-1]
    },
    type: "text"
});

また、新しいデータが送信されたときにテーブルを更新するために jQuery で選択されるクラスなど、スタイルやその他の属性を与えるために、生の HTML にスパン タグを追加しました。下記参照:

        //if data is changed, trigger an update on the text boxes to make sure filtering is up to date. 'allocation' is any dynamic field in a row such as textbox
    $(".allocation").change(function () {
        $("#manageReviewsTable").trigger("update");
        $("#manageReviewsTable").trigger("appendCache");
    });

ご不明な点がございましたら、以下にコメントしてください。

于 2012-04-25T18:26:11.187 に答える