سؤال

لديّ تطبيق عربة تسوق يعمل على Monorail واستخدام Castle ActivereCord/Nhibernate ، وهناك طاولة للتسوق وطاولة التسوق ، والتي يتم تعيينها إلى الكيانات.

إليك السيناريو: يضيف المستخدم أشياء إلى عربة التسوق ، وقل 5 عناصر ، ويذهب لعرض العربة. تُظهر العربة جميع العناصر الخمسة. يقوم المستخدم بتكرار علامة التبويب/النافذة ويحصل على علامة تبويب أخرى لنفس العربة (استدعاؤها علامة التبويب B). يقوم المستخدم بإزالة عنصر من العربة ، لذلك يوجد الآن 4 عناصر في Tab B ، ولكن في علامة التبويب الأصلية A ، لا يزال هناك 5 عناصر. يعود المستخدم إلى علامة التبويب "أ" ، ويقوم بتحديث شيء ما في العربة وينقر على زر "التحديث" الذي يقدم التغييرات. يحاول إجراء Monorail الخاص بي القيام بـ ArdataBind على التسوق باستخدام البيانات من العرض ، والذي يتضمن جميع العناصر الخمسة. عندما يصل إلى العنصر الذي حذفه المستخدم من Tab B ، فإنه يلقي "لا يوجد صف مع معرف معين" لهذا العنصر.

لا يمكنني معرفة ما إذا كانت هناك طريقة لعدم ربط هذا الصف ، أو إرجاع NULL ، وإرجاع مثيل جديد ، وما إلى ذلك؟ هناك معلمة autoloadbehavior على سمة Ardatabind ، ولكن يبدو أنها تؤثر فقط على تحميل كيانات الأطفال ، وليس كيان الجذر. بغض النظر عن الخيار الذي أختاره ، أحصل على استثناء قبل التحكم حتى في إدخال طريقة الإجراء (باستثناء AutoloadBehavior.now ، لكن هذا لا يساعدني حقًا).

بدلاً من ذلك ، لدي رمز يستدعي request.obtainparamsnode () لسحب العقد النموذجية وتحليلها يدويًا في كائنات ، ويتجاهل تلك التي لم تعد موجودة. هل هناك طريقة أفضل؟

شكرًا.

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

المحلول

يرث Ardatabinder, ، تجاوز FindByPrimaryKey(Type targetType, object id):

protected override object FindByPrimaryKey(Type targetType, object id) {
  return FindByPrimaryKey(targetType, id, false);
}

المفتاح هنا هو خاطئة المعلمة ، مما يجعله يعود فارغة بدلا من الرمي.

ثم يرث Ardatabindattribute, ، تجاوز طريقة CreateBinder () وجعلها تعيد الموثق الجديد بدلاً من Ardatabinder الافتراضي.

ثم قم بتطبيق سمة الموثق المخصصة بدلاً من Ardatabindattribute.

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