سؤال

أقوم بتحميل سلسلة من عناصر التحكم في حدث Page_Load. ومع ذلك ، لا بد لي من إعادة إنشاء عناصر التحكم في كل تحميل في كل صفحة ، مما يعني تخزين بياناتهم في مكان آخر. هذا مرهق.

protected void Page_Load(object sender, EventArgs e)
{
   MyControl control = (MyControl)LoadControl(...);
   control.Initialize(GlobalClass.controlData);
   //^gives the control the data it had previously.  
   //Or use ViewState["controlData"] if serializable.
   Controls.Add(control);
}

أشعر أنني يجب أن أستخدم if (!IsPostBack) {}, ، لكني لا أعرف كيف ، أو لماذا.

في المقابل ، إذا وضعت الضوابط في الترميز ، فإن الضوابط يبدو أنها ثابتة. على سبيل المثال ، سيتذكر زر في Mark-Up أي تغييرات على خاصية النص (على ما أظن؟).

<asp:Button ID="buttonText" runat="server" 
            Text="Text Segment" onclick="buttonText_Click" />

كيف يمكنني الحفاظ على نوع من الثبات مع عناصر التحكم المضافة ديناميكيًا ، مثل الضوابط المضافة عبر Mark-Up؟ هذا من شأنه أن يوفر لي الكثير من العمل والإحباط.

شكرًا.

(لقد قمت بترميز إلى الأبد صغير ، لكن كلما قمت بفعل ASP.NET ، كلما أصبحت أكثر حيرة. وهو ما هو عكس ما فهمته في تعلم العمل: p.)

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

المحلول

لعناصر التحكم التي تم تحميلها ديناميكيًا ، إذا قمت بتحميلها أثناء حدث Page_init ، فيمكنك بعد ذلك إضافتها إلى ViewState وستتمكن من الاحتفاظ بالدولة من Postback إلى Postback.

نصائح أخرى

أنا أفهم وجهة نظرك. نعم ، هذا أمر مرهق ، ولكن هذه هي الطريقة التي تعمل بها التكنولوجيا عديمة الجنسية.

لا توجد طريقة لتحقيق نفس البهافيور من الضوابط الثابتة (تلك التي وضعتها في علامة HTML).

اتبع النصائح التي قدمتها في هذه الإجابة:

الوصول إلى عناصر التحكم التي تم إنشاؤها ديناميكيًا (C#)

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