سؤال

لدي فئة الأسئلة:

class Question {
    public int QuestionNumber { get; set; }
    public string Question { get; set; }
    public string Answer { get; set; }
}

الآن أقوم بتوفير ICollection من خلال ObjectDataSource، وعرضها باستخدام مكرر منضم إلى DataSource.أنا أستعمل <%#Eval("سؤال")%> لعرض السؤال، وأستخدم TextBox و <%#Bind("الإجابة")%> لقبول الجواب.

إذا قام ObjectDataSource الخاص بي بإرجاع ثلاثة كائنات أسئلة، فسيعرض جهاز Repeater الأسئلة الثلاثة مع مربع نص يتبع كل سؤال حتى يتمكن المستخدم من تقديم إجابة.

تعمل بشكل جيد لحد الآن.

أريد الآن أخذ إجابة المستخدم وإعادتها إلى فئات الأسئلة ذات الصلة، والتي سأستمر فيها بعد ذلك.

من المؤكد أن الإطار يجب أن يعتني بكل هذا من أجلي؟لقد استخدمت طريقة Bind، وحددت DataSourceID، وحددت طريقة تحديث في فئة ObjectDataSource الخاصة بي، ولكن يبدو أنه لا توجد طريقة لبدء الأمر برمته.

لقد حاولت إضافة زر أمر وفي الكود الموجود خلف استدعاء MyDataSource.Update()، ولكنه يحاول استدعاء أسلوب التحديث الخاص بي بدون أي معلمات، بدلاً من معلمة السؤال التي يتوقعها.

من المؤكد أن هناك طريقة سهلة لتحقيق كل هذا مع القليل من التعليمات البرمجية أو بدونها؟

يبدو أن جميع القطع موجودة، ولكن هناك بعض الغراء المفقود للصقها معًا.

يساعد!

أنتوني

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

المحلول

يجب عليك التعامل مع حدث إعادة النشر (النقر فوق الزر أو أي شيء آخر) ثم تعداد عناصر المكرر مثل هذا:

foreach(RepeaterItem item in rptQuestions.Items)
{
   //pull out question
   var question = (Question)item.DataItem;
   question.Answer = ((TextBox)item.FindControl("txtAnswer")).Text;

   question.Save() ?  <--- not sure what you want to do with it
}

نصائح أخرى

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

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

إذن ما الفائدة من طريقة Bind (على عكس طريقة Eval) إذا كان عليّ ربط كل شيء احتياطيًا يدويًا عند إعادة النشر؟

بن:بعد تجربته، يكون item.DataItem دائمًا فارغًا، ووفقًا للمنشور التالي، فهو غير مصمم للاستخدام بهذه الطريقة:

http://www.netnewsgroups.net/group/microsoft.public.dotnet.framework.aspnet/topic4049.aspx

إذن كيف يمكنني ربطه يدويًا مرة أخرى؟

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