سؤال

لقد قمت بإنشاء عناصر تحكم 2 لمعالجة كائن بيانات: 1 للعرض والآخر للتحرير.

في صفحة واحدة أقوم بتحميل "عرض" UserControl ونقل البيانات إليها بهذه الطريقة:

ViewControl control = (ViewControl)LoadControl("ViewControl.ascx");
control.dataToView = dataObject;
this.container.Controls.Add(control);

هذا كل شيء على ما يرام وداخل عنصر التحكم يمكنني الحصول على هذه البيانات وعرضها.

الآن أحاول اتباع نهج مماثل للتحرير. لديّ عنصر تحكم مستخدم مختلف لهذا (مع بعض مربعات النص للتحرير) والتي أقوم بتمرير البيانات الأصلية بنفس الطريقة التي فعلت بها للعرض:

EditControl control = (EditControl)LoadControl("EditControl.ascx");
control.dataToEdit = dataObject;
this.container.Controls.Add(control);

الذي يعمل أيضًا بشكل جيد.

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

هل هناك حل لهذا؟ أم أن هذه الطريقة لمحاولة الحفاظ على الأشياء منفصلة وربما لا يمكن استخدامها غير ممكنة؟

شكرا مقدما.

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

المحلول 3

هذا هو الحل:

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

نصائح أخرى

ما عليك سوى الحفاظ على إشارة إلى عنصر التحكم كمتغير في رمز الصفحة. بمعنى آخر

private EditControl control;

protected void Page_Init(object sender, EventArgs e)
{
   control = (EditControl)LoadControl("EditControl.ascx");
   control.dataToEdit = dataObject;
   this.container.Controls.Add(control);
}

protected void Button_Click(object sender, EventArgs e)
{
   var dataToEdit = control.dataToEdit; 
}

طالما أنك تقوم بإنشاء عنصر التحكم في الجزء الأيمن من دورة حياة الصفحة (التهيئة) بعد ذلك ViewState سيتم الحفاظ عليها. أفترض أن datatoedit هو مجرد أ TextBox أو شيء ما؟

يجب إضافة عناصر التحكم التي تم إنشاؤها ديناميكيًا Init أو PreInit الحدث على الصفحة.

عليك أن تفعل ذلك هنا لأن حالة الضوابط لم يتم تحميلها بعد. إذا قمت بإضافة عنصر التحكم بعد أن تفرغها لأن الصفحة التي تم ملؤها بالفعل قيم صفحة التحكم في وقت مبكر من دورة حياة الصفحة.

مزيد من المعلومات حول دورة حياة الصفحة هنا

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