سؤال

ولدي على UserControl يحتوي على UpdatePanel الذي يلف بعض عناصر التحكم الأخرى. وسوف تستخدم في UserControl على بعض الصفحات التي لديها بالفعل ScriptManager والصفحات الأخرى التي لم يكن لديك ScriptManager. أود UserControl إلى تحقيق ScriptManager الخاصة به تلقائيا إذا كان أحد لا وجود له.

ولقد حاولت ScriptManager.GetCurrent واذا عاد لاغيا ط خلق بلدي ScriptManager وأدخله في نموذج ولكن لا أستطيع أن يجد لنفسه مكانا في وقت مبكر في دورة الحياة في UserControl لتشغيل هذا الرمز. وأظل الحصول على خطأ "التحكم بالمعرف 'uPnlContentList" يتطلب ScriptManager على الصفحة. وScriptManager يجب أن تظهر قبل أي ضوابط التي تحتاج إليها. " في كل مرة أحاول تحميل الصفحة. وOnInit الأماكن لقد حاولت تشغيل قانون بلدي، CreateChildControls وPageLoad وانهم لم الحصول على استدعاء لأنه يموت قبل الوصول إليهم.

وأين يجب أن أضع هذا الاختيار؟

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

المحلول

وأنا أكره أن تأتي في هذا في اتجاه آخر، ولكن الذي تستخدمه صفحة رئيسية؟ وإذا كان الأمر كذلك، هل يعتبر وضع ScriptManager واحد على ذلك، ويجري معها؟

نصائح أخرى

ووضع ScriptManager في MasterPage بك أن كل ما تبذلونه من الملفات ASPX المرجعية. ثم في أي مكان آخر في الموقع الذي كنت بحاجة إلى العمل مع ScriptManager استخدام ScriptManagerProxy التي سوف تحصل على ScriptManager من الصفحة الرئيسية وتتيح لك العمل معها في عنصر تحكم المستخدم ورمز وراءها.

سوف

والآن يدعو ScriptManager.GetCurrent (صفحة) تعطيك إشارة إلى مدير النصي.

<asp:ScriptManagerProxy>
  <Scripts>
    <asp:ScriptReference Path="~/Scripts/myscript.js" />
  <Scripts>
</asp:ScriptManagerProxy>

إليك وصلة:

معلومات MSDN

وأعتقد يجب أن تعمل الحدث التهيئة. استخدام الأسلوب الذي وصفه (أي التأكد من أن ScriptManager.GetCurrent يعود لاغية قبل أن يضيف) ولكن عند إضافة ScriptManager، تأكد من إضافة أنها عنصر التحكم الأول داخل النموذج.

وأنا لم تختبر هذا ولكن أعتقد أنه سوف يعمل.

وماذا عملت بالنسبة لي كان من ضمنهم هذا الخط بعد

 <asp:ScriptManager ID="scriptManager" runat="server"/>

وهذا حصل لي حول "... يتطلب ScriptManager على الصفحة. وScriptManager يجب أن تظهر قبل أي ضوابط التي تحتاج إليها."

ولقد جعلت من 2 الأشياء التي يعمل.

في في UserControl جعل هذا الفرعية:

Public Sub SetFocus()
    txtBox.Focus()
End Sub

في الموقع caling، نسمي هذا قبل ScriptManagerCall بك

userControl.SetFocus()

إذا كان لديك AutoPostback عليك UserControl لديك أيضا لتعيين التركيز في الحدث TextChanged.

Protected Sub txtBox_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtBox.TextChanged
    txtBox.Focus()
    ......
End Sub

ونأمل أن يكون هذا يعمل.

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