我正在使用一个 ListViewByQuery 在自定义web部件中。如果我设置CAML GroupBy<GroupBy Collapse='FALSE'> (即展开),webpart工作正常。但是,如果我将其设置为 <GroupBy Collapse='TRUE'>, ,该项目将扩大,但随后被卡住/挂在"工作就可以了。.."信息:

enter image description here

(我相信SharePoint2010中的旧消息是"正在加载。..").

这是预扩展时的工作副本:

enter image description here

这似乎不是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') 检查-这只是我的方法,以确保它只点击 第一个 折叠链接(即的加/减图像,而不是文本)。

许可以下: CC-BY-SA归因
scroll top