يختفي محتوى التحكم المخصص للمستخدم في UpdatePanel عند النقر على زر إعادة النشر

StackOverflow https://stackoverflow.com//questions/9689067

سؤال

لدي الوظيفة التالية التي تقوم بتحديث محتوى UpdatePanel عن طريق إضافة/تحميل عنصر تحكم مستخدم مخصص ascx في العنصر النائب الموجود في default.aspx:

 protected void NavigationTab_Click(string ascxpath)
                {           
                        Control ctrl = LoadControl(ascxpath);
                        //cphmaincontent is my asp ContenPlaceHoderId in masterpage
                        PlaceHolder phmaincontent = (PlaceHolder)cphmaincontent.FindControl("phmaincontent");
                        phmaincontent.Controls.Clear();
                        phmaincontent.Controls.Add(ctrl);
                        upmaincontent.Update();            
                }

لوحة تحديث الصفحة الرئيسية:

<asp:UpdatePanel ID="upmaincontent" runat="server" UpdateMode="Conditional">
                    <ContentTemplate>
                        <asp:Label ID="lbmsg" runat="server" Text=""></asp:Label>
                        <asp:ContentPlaceHolder ID="cphmaincontent" runat="server">                       
                        </asp:ContentPlaceHolder>                         
                    </ContentTemplate>
                </asp:UpdatePanel>            

أنا أتصل بـ NavigationTab_Click من عنصر تحكم التنقل الخاص بي والذي يعد عنصر تحكم ascx مخصصًا آخر، وكائن التحكم ctrl الخاص بي الذي يتم تحميله ديناميكيًا على كل منهما يحتوي على زر وتسمية عندما أنقر فوق الزر فإنه ببساطة يعيد تعيين بعض النص إلى التسمية.

ولدي هذا الكود التالي على صفحتي الرئيسية فقط للحصول على مسار التحكم ascx:

protected override void OnInit(EventArgs e)
        {           
               //raising an event to set ascx path
                mainmenu.NavigatePath += new usercontrols.mainmenu.NavigationHandler(NavigationTab_Click);

                base.OnInit(e);          
        } 

حتى الآن كل شيء يعمل بشكل جيد، بعد تحميل كائن ctrl الخاص بي عن طريق استدعاء وظيفة NavigationTab_Click، أرى مفتاح ctrl الخاص بي في العنصر النائب ولديه الزر والتسمية ولكن المشكلة هي أنه إذا قمت بالنقر فوق هذا الزر، فيجب إعادة تعيين التسمية لبعض النص ولكن بدلاً من ذلك يختفي محتوى التحكم ctrl بالكامل، الرجاء المساعدة.

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

المحلول

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

هذا هو السبب وراء ضرورة تجنب عناصر التحكم الديناميكية كلما أمكن ذلك.

لذا يمكنك إضافة عناصر تحكم في معالجات الأحداث كما فعلت.ولكن يجب إعادة إنشائها في إعادة النشر التالية.لذلك تحتاج إلى تخزين ما (f.e.المعرفات) أو عدد عناصر التحكم التي تم إنشاؤها بالفعل.ويمكن القيام بذلك على سبيل المثال في ViewState أو Session.ثم يمكنك تعيين المعرفات المناسبة لعناصر التحكم (على سبيل المثال مع إضافة الفهرس أو المعرف).

فيما يلي بعض المعلومات الإضافية حول هذا الموضوع:

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