0

我正在使用带有 MVC 3 的 tablesorter 和 html 助手来填充 a for 每个循环中的列,该循环通过对象中的项目。这工作正常,我的 html 表正在以我想要的方式填充。但我在对员工姓名进行排序时遇到问题,这是表中的第二列,如下所示:

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

当我单击格式正确以使用表格排序器的“员工”标题时,不会发生排序。但是,当我单击另一列时,例如“审阅者列表”(这是选择列表中的 @Html.ListBox),它会按该列排序。我可以单击返回到“员工”标题,它会进行更改,但它们不是按字母顺序排列的(名字 + 姓氏)。排序也不适用于第一列“年份”,它只显示 2011 年或 2012 年。

这是我的 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 无法对任何有输入的行进行排序。

修复:添加一个隐藏字段,其值设置为可见字段的值。

我的修复:获取原始文本后,我实现了自己的自定义解析器设置,以按姓氏对列进行排序。

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

此外,我在原始 HTML 中添加了 span 标签以提供样式和其他属性,例如在 jQuery 中选择的类以在提交新数据时更新表。见下文:

        //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 回答