Развертывание веб-части ListViewByQuery застряло на фразе «Работаем над этим…»

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/92807

Вопрос

я использую ListViewByQuery в пользовательской веб-части.Если я установлю CAML GroupBy к <GroupBy Collapse='FALSE'> (т.е.развернуто), веб-часть работает нормально.Однако, если я установлю его на <GroupBy Collapse='TRUE'>, элемент развернется, но затем зависнет на сообщении «Работаем над этим...»:

enter image description here

(Я полагаю, что старое сообщение в SharePoint 2010 было «Загрузка...»).

Вот рабочая копия в предварительно развернутом виде:

enter image description here

Похоже, это не проблема JavaScript (проверено в нескольких браузерах).

Как это исправить?


В стороне:Карин упоминает очень похожую проблему в своем блоге, используя ListViewByQuery Веб-часть здесь.Я проверю предлагаемое исправление JavaScript и сообщу об этом, но считаю, что это всего лишь обходной путь. Какова основная причина и решение?

Обновлять:Я не могу заставить работать исправление JS.Я динамически генерирую ListViewByQuery управление в моей пользовательской веб-части (как казалось бы, необходимо), и хотя JS, кажется, срабатывает, я не могу определить, как его отладить.

Обновление 2:Наконец-то исправление JS заработало - свертывание вызывалось дважды (так что оно снова просто расширялось).Вскоре я предложу это как возможный ответ, но не приму его как реальный ответ.

Это было полезно?

Решение

Вот так у меня заработало исправление/кудж JavaScript.Во-первых, необходимо предварительно расширить ListViewByQuery Группа CAML (Collapse='FALSE').Во-вторых, предлагаемый JavaScript запускается дважды и просто сворачивает/разворачивает результат, поэтому в 2013 году он, похоже, не работает.Итак, вот как я начал работать:

Я создаю ListViewByQuery управлять динамически (по мере необходимости/рекомендовано в документации):

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 с атрибуция
Не связан с sharepoint.stackexchange
scroll top