扩展ListViewByQuery Web部件停留在"处理它..."上
-
10-12-2019 - |
题
我正在使用一个 ListViewByQuery
在自定义web部件中。如果我设置CAML GroupBy
到 <GroupBy Collapse='FALSE'>
(即展开),webpart工作正常。但是,如果我将其设置为 <GroupBy Collapse='TRUE'>
, ,该项目将扩大,但随后被卡住/挂在"工作就可以了。.."信息:
(我相信SharePoint2010中的旧消息是"正在加载。..").
这是预扩展时的工作副本:
这似乎不是JavaScript问题(在多个浏览器上测试过)。
我该如何解决这个问题?
一边:卡琳在她的博客上提到了一个非常类似的问题。 ListViewByQuery
Web部件 这里.我会测试建议的JavaScript修复并报告回来,但我相信这只是一个解决方法-根本原因和解决方案是什么?
更新资料:我无法让JS修复工作。我正在动态生成 ListViewByQuery
控制在我的自定义webpart(似乎需要),虽然JS似乎火,我无法确定如何调试它。
更新2:终于得到了JS修复工作-崩溃被调用了两次(所以它会再次展开jsut)。会很快提出这个可能的答案,但不会接受它作为实际的答案。
解决方案
这就是我如何让JavaScript修复/kludge工作。首先,您必须预先展开 ListViewByQuery
CAML集团(Collapse='FALSE'
).其次,建议的JavaScript运行两次,只是折叠/扩展结果,所以它似乎在2013年不起作用。所以我是这样工作的:
我创建了 ListViewByQuery
动态控制(根据doco中的要求/推荐):
Panel pnlDiv = new Panel();
pnlDiv.ID = "pnlDiv";
pnlDiv.CssClass = "ms-authoringcontrols";
ListViewByQuery lvPdfs = new ListViewByQuery();
..
EnsureChildControls();
pnlDiv.Controls.Add(lvPdfs);
pnlDiv.RenderControl(writer);
RenderChildren(writer);
由于我在JavaScript方面遇到了麻烦,我在服务器端发出了它:
private void RegisterExpandJavascriptFix()
{
ClientScriptManager cs = Page.ClientScript;
if (!cs.IsClientScriptBlockRegistered(this.GetType(), "CollapseFunc"))
{
cs.RegisterClientScriptBlock(this.GetType(), "CollapseFunc", JSExpandFix, true);
}
if (!cs.IsStartupScriptRegistered(this.GetType(), "Collapse"))
{
cs.RegisterStartupScript(this.GetType(), "CollapseFunc", "collapseDiv();", true);
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
RegisterExpandJavascriptFix();
}
}
这里是JavaScript:
private const string JSExpandFix = @"function collapseDiv() {
var div = document.getElementById('pnlDiv');
//alert(div);
if (div != null) {
var links = div.getElementsByTagName('a');
for (var i = 0; i < links.length; i++) {
if (links[i].href == 'javascript:' && links[i].onclick.toString().indexOf('ExpCollGroup') > -1 && links[i].previousSibling.tagName == 'IMG') {
//alert(links[i].onclick.toString());
links[i].click();
}
}
}
}";
注意 links[i].previousSibling.tagName == 'IMG')
检查-这只是我的方法,以确保它只点击 第一个 折叠链接(即的加/减图像,而不是文本)。