Pergunta

Eu estou usando um ListViewByQuery em um custom web-parte.Se eu definir o CAML GroupBy para <GroupBy Collapse='FALSE'> (i.é.expandido), a peça web funciona bem.No entanto, se eu configurá-lo para <GroupBy Collapse='TRUE'>, o item irá se expandir, mas, em seguida, é preso/trava no "Trabalho sobre ele..." mensagem:

enter image description here

(Eu acredito que a mensagem antiga no SharePoint 2010 foi de "Carregando...").

Aqui está a cópia de trabalho quando é pré-expandidas:

enter image description here

Este não parece ser um JavaScript problema (testado em vários navegadores).

Como faço para corrigir isso?


De lado:Karine menciona um problema muito semelhante em seu blog usando o ListViewByQuery Web Part aqui.Vou testar o sugerido JavaScript correcção e relatar de volta, mas eu acredito que essa é apenas uma solução - o que é a causa e a solução?

Atualização:Eu não consigo fazer a JS correcção de trabalho.Eu estou gerar dinamicamente o ListViewByQuery controle na minha peça web personalizada (como aparentemente necessário) e a JS, parece fogo, eu não posso determinar como depurá-lo.

Atualização 2:Finalmente tenho a JS correcção de trabalho - o colapso estava sendo chamado duas vezes (de modo que seria jsut expandir novamente).Vai sugerir isso como possível resposta em breve, mas não aceitá-lo como resposta real.

Foi útil?

Solução

Isto é simplesmente como eu tenho o JavaScript correcção/kludge de trabalho.Em primeiro lugar, você deve pré-expanda a ListViewByQuery CAML (grupo deCollapse='FALSE').Em segundo lugar, a sugestão de JavaScript é executado duas vezes e simplesmente fecha/expande o resultado, de modo que ele parece não funcionar em 2013.Então aqui está como eu tenho de trabalhar:

Eu criar o ListViewByQuery controle dinamicamente (como requerido/recomendar no documentário):

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);

Como tive problemas com o JavaScript eu emitida ele do lado do servidor:

        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();
            }
        }

E aqui está o 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();
                                                            }
                                                        }
                                                    }
                                                }";   

Nota o links[i].previousSibling.tagName == 'IMG') check - esta é apenas a minha maneira de garantir que ele só clica em primeira colapso de link (i.e.a plus/minus imagem, em vez do texto).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top