L'expansion de ListViewByQuery Web Partie bloqué sur “en Travaillant sur elle...”
-
10-12-2019 - |
Question
Je suis à l'aide d'un ListViewByQuery
dans un site web-partie.Si j'ai mis le CAML GroupBy
pour <GroupBy Collapse='FALSE'>
(c'est à direélargi), la partie web fonctionne très bien.Cependant, si je l'ai mis à <GroupBy Collapse='TRUE'>
, l'élément s'élargir, mais ensuite est coincé/se bloque sur le "Travail sur elle..." message:
(Je crois que l'ancien message dans SharePoint 2010 "Chargement en cours...").
Voici la copie de travail quand il est pré-déployée:
Ce ne semble pas être une question de JavaScript (testé sur plusieurs navigateurs).
Comment puis-je résoudre ce problème?
De côté:Karine mentionne très semblable à la question sur son blog à l'aide de la ListViewByQuery
Web Partie ici.Je vais tester le suggère JavaScript fixer et de faire un rapport, mais je crois que ce n'est qu'une solution de contournement - quelle est la cause sous-jacente et la solution?
Mise à jour:Je ne peux pas obtenir la JS correctif de travail.Je suis de la génération dynamique de l' ListViewByQuery
de contrôle dans mon webpart personnalisé (comme apparemment requis) et de tout le JS semble le feu, je ne peux pas déterminer la façon de le déboguer.
Mise à jour 2:A finalement obtenu la JS correctif de travail - l'effondrement a été appelé à deux reprises (de sorte qu'il serait juste d'élargir à nouveau).De suggérer ce que possible de répondre rapidement, mais ne pas l'accepter comme réponse réelle.
La solution
C'est tout simplement la façon dont j'ai obtenu le JavaScript fix/bidouille de travail.Tout d'abord, vous devez pré-développer la ListViewByQuery
CAML groupe (Collapse='FALSE'
).Deuxièmement, le JavaScript s'exécute deux fois et tout simplement s'effondre/élargit le résultat, de sorte qu'il ne semble pas fonctionner en 2013.Donc voici comment j'ai obtenu de travail:
J'ai créer le ListViewByQuery
contrôle dynamique (tel que requis/recommander dans 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);
Comme j'ai eu du mal avec le JavaScript j'ai émis ce côté serveur:
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();
}
}
Et voici le code 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();
}
}
}
}";
Remarque l' links[i].previousSibling.tagName == 'IMG')
check - c'est juste ma façon de s'assurer de clics seulement l' première l'effondrement lien (c'est à direles plus/moins de l'image, plutôt que le texte).