توسيع جزء ويب ListViewByQuery عالق في "العمل عليه..."
-
10-12-2019 - |
سؤال
أنا أستخدم أ ListViewByQuery
في جزء ويب مخصص.إذا قمت بتعيين CAML GroupBy
ل <GroupBy Collapse='FALSE'>
(أي.موسعة)، جزء الويب يعمل بشكل جيد.ومع ذلك، إذا قمت بتعيين ذلك <GroupBy Collapse='TRUE'>
, ، سيتم توسيع العنصر، ولكنه يظل عالقًا/متوقفًا عند ظهور الرسالة "جارٍ العمل عليه...":
(أعتقد أن الرسالة القديمة في SharePoint 2010 كانت "جارٍ التحميل...").
إليك نسخة العمل عندما يتم توسيعها مسبقًا:
لا يبدو أن هذه مشكلة في JavaScript (تم اختبارها على متصفحات متعددة).
كيف يمكنني حل هذه المشكلة؟
جانبا:تذكر كارين مشكلة مشابهة جدًا في مدونتها باستخدام ListViewByQuery
جزء الويب هنا.سأختبر إصلاح JavaScript المقترح وأقدم تقريرًا، لكنني أعتقد أن هذا مجرد حل بديل - ما هو السبب الأساسي والحل؟
تحديث:لا يمكنني تشغيل إصلاح JS.أقوم بإنشاء ملف ديناميكيًا ListViewByQuery
التحكم في جزء الويب المخصص الخاص بي (كما هو مطلوب على ما يبدو) وبينما يبدو أن JS يعمل، لا يمكنني تحديد كيفية تصحيحه.
التحديث 2:أخيرًا تم إصلاح JS - تم استدعاء الانهيار مرتين (لذلك سيتم توسيعه مرة أخرى).سنقترح هذا كإجابة محتملة قريبًا، ولكن لن نقبله كإجابة فعلية.
المحلول
هذه هي الطريقة التي نجحت بها في إصلاح/خطأ JavaScript.أولاً، يجب عليك توسيع النطاق مسبقًا ListViewByQuery
مجموعة CAML (Collapse='FALSE'
).ثانيًا، يتم تشغيل جافا سكريبت المقترح مرتين ويقوم ببساطة بطي/توسيع النتيجة، لذلك لا يبدو أنه يعمل في عام 2013.إذن هذه هي الطريقة التي بدأت بها العمل:
أقوم بإنشاء ListViewByQuery
التحكم ديناميكيًا (كما هو مطلوب/موصى به في 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);
نظرًا لأنني واجهت مشكلة مع 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();
}
}
وهنا جافا سكريبت:
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')
تحقق - هذه هي طريقتي فقط للتأكد من أنها تنقر فقط على أولاً رابط الانهيار (أيصورة الزائد/الناقص، بدلاً من النص).