سؤال

أنا أستخدم أ ListViewByQuery في جزء ويب مخصص.إذا قمت بتعيين CAML GroupBy ل <GroupBy Collapse='FALSE'> (أي.موسعة)، جزء الويب يعمل بشكل جيد.ومع ذلك، إذا قمت بتعيين ذلك <GroupBy Collapse='TRUE'>, ، سيتم توسيع العنصر، ولكنه يظل عالقًا/متوقفًا عند ظهور الرسالة "جارٍ العمل عليه...":

enter image description here

(أعتقد أن الرسالة القديمة في SharePoint 2010 كانت "جارٍ التحميل...").

إليك نسخة العمل عندما يتم توسيعها مسبقًا:

enter image description here

لا يبدو أن هذه مشكلة في 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') تحقق - هذه هي طريقتي فقط للتأكد من أنها تنقر فقط على أولاً رابط الانهيار (أيصورة الزائد/الناقص، بدلاً من النص).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى sharepoint.stackexchange
scroll top