立即通过动态复选框过滤SharePoint列表(使用C#和/或Ajax)

时间:2016-08-09 12:47:18

标签: javascript c# jquery ajax sharepoint

我目前正在寻找一种方法来将过滤功能添加到SharePoint中的列表,该列表通过复选框选择过滤列表内容。

这个小模型可能有助于理解我在说什么:

Mockup

我们的想法是在右侧有一个普通的SharePoint自定义列表,在左侧有一个复选框列表,它将从列表的内容动态生成 - >一列是“过滤器组”,所有字段内容都是过滤器值。

当在左侧选择一个或多个值时,列表中的项目应立即相应地过滤(ajax,而不重新加载页面)。 例如,在样机中,选择“纽约”和“蓝色”只会显示“Steve's Car”这个项目。

您现在,就像几乎所有在线商店中的产品过滤器一样。

如何实现?如果这可以包含在我的解决方案包中(包括C#/ jQuery中的其他内容),那将是非常棒的。

我是SharePoint的前端自定义新手,但我确信有一种方法: - )

编辑:我顺便使用SP2016。

1 个答案:

答案 0 :(得分:2)

潘多拉!

据我了解,您的第一个问题是如何通过动态获取左侧滤镜的值。我看到有两种方法:第一种方法,你可以建立caml查询并从列表中获取项目;第二种方法,你可以使用ctx.ListData,它自己初始化sharepoint并在ctx.ListData.Row(项目数组)中处理项目并获得唯一的字段值。请注意,ctx.ListData.Row仅包含页面上列表视图中加载的项目。

对于列表过滤,您可以连接页面哈希的过滤器链接。示例:“?List = {ListID}& View = {ViewID}& FilterField1 = Color-FilterValue1 = Blue”。尝试过滤列表中的列,您将看到网址修改。您可以通过ctx.listName和ctx.view检索ListID和ViewId。

然后在函数MyRefreshPageToEx中传递它。列表将被过滤。

More list filtration info

function FilterList(){
  var tableId = $(".ms-listviewtable").attr("id");
  var filterUrl = "?List={ListID}&View={ViewID}&FilterField1=Color-FilterValue1=Blue";
  MyRefreshPageToEx(tableId, filterUrl, false);
}

function MyRefreshPageToEx(lvTableID, url, bForceSubmit) {
    var tblv = document.getElementById(lvTableID);
    var clvp = CLVPFromCtx(tblv);

    if (clvp != null && clvp.ctx.IsClientRendering) {
        clvp.RefreshPaging(url);
        clvp.ctx.queryString = url;
        if ((typeof clvp.ctx.operationType == "undefined" || clvp.ctx.operationType == SPListOperationType.Default) && Boolean(clvp.ctx.ListData)) {
            var fromPage = clvp.ctx.ListData.FirstRow - 1;
            var toPage = Number(GetUrlKeyValue("PageFirstRow", false, url));

            if (!isNaN(fromPage) && !isNaN(toPage) && fromPage != toPage)
                fromPage < toPage ? (clvp.ctx.operationType = SPListOperationType.PagingRight) : (clvp.ctx.operationType = SPListOperationType.PagingLeft);
        }
    }
    else {
        SubmitFormPost(url, bForceSubmit);
    }
}