Espansione ListviewbyQuery Web Part bloccata su "Lavorare su di esso ..."
-
10-12-2019 - |
Domanda
Sto usando un ListViewByQuery
in una parte web personalizzata. Se impostare il GroupBy
Caml in <GroupBy Collapse='FALSE'>
(I.e. ESPANDATO), il WebPart funziona bene. Tuttavia, se lo metto su <GroupBy Collapse='TRUE'>
, l'oggetto si espanderà, ma quindi è bloccato / si blocca sul messaggio "Lavorando su di esso ...":
(Credo che il vecchio messaggio in SharePoint 2010 sia stato "caricamento ...").
Ecco la copia di lavoro quando è pre-ampliato:
Questo non sembra essere un problema JavaScript (testato su più browser).
Come faccio a risolvere questo?
.
A parte: Karine menziona un problema molto simile sul suo blog utilizzando la parte web ListViewByQuery
qui . Testerò la correzione JavaScript suggerita e riporta indietro, ma credo che questo sia solo una soluzione alternativa - qual è la causa sottostante e la soluzione?
Aggiornamento: non riesco a far funzionare la correzione JS. Sto generando dinamicamente il controllo ListViewByQuery
nel mio webpart personalizzato (apparentemente richiesto) e mentre il JS sembra sparare, non posso determinare come eseguire il debug.
Aggiornamento 2: Infine ha ottenuto il funzionamento della correzione JS - il crollo è stato chiamato due volte (quindi sarebbe stato nuovamente espandere JSUT). Suggerisce questo come possibile rispondere presto, ma non lo accetterà come risposta effettiva.
Soluzione
Questo è semplicemente come ho lavorato il problema JavaScript / KLUDY.Innanzitutto, è necessario pre-espandere il gruppo Caml ListViewByQuery
(Collapse='FALSE'
).In secondo luogo, il JavaScript suggerito viene eseguito due volte e collassa / amplia semplicemente il risultato, quindi non sembra funzionare nel 2013. Quindi ecco come ho lavorato:
Creo dinamicamente il controllo ListViewByQuery
(come richiesto / consigliabile in 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);
.
Come ho avuto problemi con JavaScript l'ho emesso lato server:
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();
}
}
.
Ed ecco il 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 il controllo links[i].previousSibling.tagName == 'IMG')
- Questo è solo il modo in cui per assicurarsi che facciano solo clic su First Collapse Link (I.e. L'immagine più / meno, piuttosto che il testo).