سؤال

أعرض مربع حوار مشروط عبر "window.showModalDialog(..." والذي يحدث في وظيفة vbscript (الصفحة المعروضة هي aspx).أرغب في تغيير حجم النافذة بناءً على عدد الصفوف في جدول البيانات الذي يعود.لذلك من الطبيعي أن أذهب لتسجيل برنامج نصي لبدء التشغيل يقوم بتغيير حجم النافذة بناءً على عدد الصفوف.حسنًا، لم ينجح ذلك، لذا حاولت تسجيل برنامج نصي يُظهر للتو msgbox.

يبدو الرمز (في معالج الأحداث OnLoad):

 if (!this.ClientScript.IsStartupScriptRegistered(typeof(MyPageClassName), "hello"))
        {
            this.ClientScript.RegisterStartupScript(typeof(MyPageClassName), "hello",
                    @"<script language=vbscript>
                        sub fnWindowOnLoad()
                            MsgBox ""hello""
                        end sub
                        <script>", false);
        }
        if (!this.ClientScript.IsStartupScriptRegistered(typeof(MyPageClassName), "hello"))
        {
            throw new Exception("Failed to load script");
        }

بالنسبة لي يبدو أن هذا يجب أن يعمل ويعرض مربع رسالة يقول "مرحبًا" عند تحميل الصفحة (لقد قمت بتعيين حدث تحميل النافذة على fnWindowOnLoad).لكن ما يحدث ليس شيئًا، ولا استثناء، ولا إنذارًا.لقد جربت كل نوع يمكن أن أفكر فيه في نوع المكالمة.يبدو أن لا شيء يعمل.الشيء الوحيد الذي يمكنني التفكير فيه هو أنه نظرًا لأن مربع الحوار عبارة عن ClientScript مشروط، فلن يتم تشغيل RegisterStartupScript بشكل صحيح.لكن هذا لا معنى له بالنسبة لي.

لقد قمت بوضع استدعاء MsgBox "hello" في كتلة البرنامج النصي الخاصة بي مباشرة وأظهر التنبيه، لذا فمن الممكن.لكنني بحاجة إلى تعديل بعض الوسائط في الكود الموجود خلفه لذا يجب علي استخدام RegisterStartupScript بقدر ما أستطيع أن أقول.

هل كانت مفيدة؟

المحلول 2

وكان الحل لهذا أن يكون السيناريو الذي قراءة قيمة من حقل مخفي ومن ثم تغيير حجم الحوار. تم تعيين القيمة على Page_Load. استخدام RegisterStartupScript لا يبدو للعمل، لا فعل RegisterClientScript، لذلك أنا حوار مشروط متأكد من وRegisterXxx لا تحصل على طول. تحتاج إلى استخدام window.dialogHeight وwindow.dialogWidth في فبسكريبت.

نصائح أخرى

هل حاولت فتح نافذتك عبر window.open() بدلاً من window.showModalDialog()؟لقد رأيت بعض المنشورات على الويب حول حالات عدم التوافق بين showModalDialog() وRegisterStartupScript.

showModalDialog() هي طريقة IE فقط، لذلك لا يوصى بها على أي حال.أعلم أنها ملائمة لأنها تُرجع قيمة، ولكن هناك طرقًا مختلفة لمحاكاة هذه الوظيفة.

يحرر: المشكلة الأخرى في showModalDialog() هي أن IE غالبًا ما يقوم بتخزين النتائج مؤقتًا.هذا يعني أنه إذا قمت باستدعاء مربع الحوار مرة واحدة، ولم تقم بتغيير حجمه، ثم قمت بذلك مرة أخرى، فقد تحصل في المرة الثانية على مربع الحوار الأول المخبأ.إحدى الطرق للتغلب على ذلك هي إضافة سلسلة استعلام فريدة في النهاية.مثل MyDialog.aspx?q=320934 (يتم إنشاؤه أو إنشاؤه بشكل عشوائي بناءً على التشنجات اللاإرادية للخادم).

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