سؤال

قد يبدو وكأنه عنوان Daft حيث لا يجب عليك إضافة عناصر تحكم ديناميكية بعد Page_init إذا كنت ترغب في الحفاظ عليها ViewState, ، لكنني لم أستطع التفكير في طريقة أفضل لشرح المشكلة.

لدي فصل مشابه لما يلي:

public class WebCustomForm : WebControl, IScriptControl
{
    internal CustomRender Content
    {
        get
        {
            object content = this.Page.Session[this.SESSION_CONTENT_TRACKER];
            return content as CustomRender;
        }
        private set
        {
            this.Page.Session[this.SESSION_CONTENT_TRACKER] = value;
        }
    }
}

CustomRender هي فئة مجردة تنفذ لوحة العناصر التي أستخدمها لتستمتع بوحدة Customforms الخاصة بالشخصيات.

على ال Page_Init من الصفحة التي تحمل WebCustomForm, ، أقوم بتهيئة التحكم عن طريق تمرير المعرفات ذات الصلة إليها. ثم على تجاوز OnInit طريقة WebCustomForm أدعو Instantiate على CustomRender التحكم في حاليا:

if (this.Content != null)
{
     this.Content.InstantiateIn(this);
}

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

الطريقة التي أراها ، لدي ثلاثة خيارات:

  1. أنا افصل CustomRender يتحكم في السيطرة الخاصة بهم وحدهم ولديهم صفحة ASPX لكل عنصر تحكم والتعامل مع الأحداث بنفسي على الصفحة (على الرغم من أنني كنت آمل أن أجعل عنصر تحكم أسقطه على الصفحة وننسى)
  2. لا أستخدم الأحداث وأواصل طلب الصفحة الحالية ، ولكن مع معلمات الطلب المختلفة
  3. أعود إلى لوحة الرسم مع أي اقتراحات أفضل يمكن لأي شخص أن يعطيني.
هل كانت مفيدة؟

المحلول 2

ذهبت مع الخيار 1. لقد التخلصت من السيطرة المفرطة وإنشاء عناصر تحكم منفصلة تحتاج إلى الجلوس على صفحات مختلفة. لقد أضفت خصائص لأخذ عناوين URL Postback وأنشأت خصائص جلسة لتمرير معرفات بين عناصر التحكم ، لذلك لا يتعين علي الاعتماد على requestParams.

نصائح أخرى

لماذا لا تفعل ذلك في الحدث initcomplete. هذا بعد تهيئة الصفحة ولكن قبل تحميل الحالة.

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