Pregunta

estoy usando un ListViewByQuery en un elemento web personalizado.Si configuro el CAML GroupBy a <GroupBy Collapse='FALSE'> (es decir.expandido), el elemento web funciona bien.Sin embargo, si lo configuro en <GroupBy Collapse='TRUE'>, el elemento se expandirá, pero luego se atascará o se bloqueará en el mensaje "Trabajando en ello...":

enter image description here

(Creo que el mensaje anterior en SharePoint 2010 era "Cargando...").

Aquí está la copia de trabajo cuando está preampliada:

enter image description here

Esto no parece ser un problema de JavaScript (probado en varios navegadores).

¿Cómo puedo solucionar esto?


Aparte:Karine menciona un problema muy similar en su blog usando el ListViewByQuery Elemento web aquí.Probaré la solución de JavaScript sugerida e informaré, pero creo que esto es sólo una solución alternativa: ¿cuál es la causa subyacente y la solución?

Actualizar:No consigo que funcione la solución JS.Estoy generando dinámicamente el ListViewByQuery control en mi elemento web personalizado (como aparentemente es necesario) y aunque el JS parece activarse, no puedo determinar cómo depurarlo.

Actualización 2:Finalmente consiguió que la solución JS funcionara: el colapso se llamaba dos veces (por lo que simplemente se expandiría nuevamente).Sugeriré esta como posible respuesta pronto, pero no la aceptaré como respuesta real.

¿Fue útil?

Solución

Así es simplemente como conseguí que funcionara la solución/error de JavaScript.En primer lugar, debe ampliar previamente el ListViewByQuery grupo CAML (Collapse='FALSE').En segundo lugar, el JavaScript sugerido se ejecuta dos veces y simplemente contrae/expande el resultado, por lo que no parece funcionar en 2013.Así es como comencé a trabajar:

yo creo el ListViewByQuery controlar dinámicamente (según sea necesario/recomendado en 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);

Como tuve problemas con JavaScript, lo emití del lado del 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();
            }
        }

Y aquí está el 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 la links[i].previousSibling.tagName == 'IMG') comprobar: esta es solo mi manera de asegurarme de que solo haga clic en el primero colapsar enlace (es decir,la imagen más/menos, en lugar del texto).

Licenciado bajo: CC-BY-SA con atribución
scroll top