كيف يمكنني نقل عناصر التحكم إلى USERCONTROL المضافة ديناميكيًا إلى الصفحة؟

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

سؤال

لديّ UserControl يتحرك ديناميكيًا على طريقة CreateChildControls بعض عناصر التحكم في الويب. عند استخدام عنصر التحكم هذا في صفحة مثل:

<myControls:MyUserControl runat="server" ID="myUserControl" />

إنه يعمل بلا عيب.

ولكن إذا كنت أرغب في إضافة هذا USERCONTROL ديناميكيًا في صفحة مثل:

<asp:UpdatePanel runat="server">
    <ContentTemplate>
        <asp:PlaceHolder runat="server" ID="plhControls" />
    </ContentTemplate>
</asp:UpdatePanel>
<asp:Button runat="server" ID="btnAdd" OnClick="btnAdd_Click" />

.CS

protected void btnAdd_Click(object sender, EventArgs e)
{
    MyUserControl myUserControl =(MyUserControl)LoadControl("~/Controls/MyUserControl.ascx");
    myUserControl.ID = "test";
    plhControls.Controls.Add(myUserControl );
}

إنه يتعطل داخل CreateChildControls مع خطأ: لا يمكن تعديل مجموعة التحكم أثناء مراحل Databind أو Init أو Load أو Prerender أو Oprload.

الخط الدقيق هو عندما أقوم بإضافة WebControls إلى العنصر النائب داخل UserControl:

plhContent.Controls.Add(myWebControl);

لذلك لا أفهم لماذا في هذه الحالة لا يمكنني نقل عنصر تحكم على الويب داخل حدث CreateChildControls عندما أضيف UserControl ديناميكيًا.

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

المحلول

نظرًا لأن LoadControl اللحاق كل حدث للتحكم المحمّل في الحدث الحالي ، فمن المستحيل تشغيل CreateChildControls في نفس الوقت الذي حدث فيه الحدث بالفعل في ذلك الوقت.

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

نصائح أخرى

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

تتضمن الطريقة التي نستخدمها أحيانًا استخدام معلمة Postback من الصفحة. لا تنس أنك ستحتاج إلى إعادة إضافة سيطرتك على النموذج ، حيث لن يتم إنشاؤه من أجلك

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