سؤال

أود أن أسمع آرائكم و ربما أفضل الاقتراحات السيناريو التالي:

يجب تحديد مخصص ActionFilter أن يفعل بعض العمل يأتي مع بعض القيمة.وأود أن استخدام هذه القيمة في وحدة تحكم إجراءات ونماذج.

الآن يمكنني استخدام TempData لتمرير هذه القيمة من ActionFilter إلى أي وحدة تحكم طريقة عمل, ثم توزيع هذه القيمة على جميع النماذج التي تم تمريرها إلى عاد وجهات النظر.

أنا متأكد من أنه سوف يعمل ولكن هذا TempData سوف يكون هناك في الدورة أين ومتى لا أحد في الواقع يحتاج إليه بعد الآن.القيمة المفترض أن تستخدم حصرا في القانون خلال وقت طلب واحد وبعد ذلك بفعالية يبطل.

وقد تأتي مع اثنين من الخيارات:

  1. في ActionFilter انا تعيين هذه القيمة في TempData في OnActioExecuting() وأنا إزالته في وهذا مؤيد بالبيانات المستمدة().لا أفهم هذا الأمر صحيح أنه بحلول الوقت وهذا مؤيد بالبيانات المستمدة يسمى وحدة تحكم العمل قد انتهى ، استجابة وقد تم بالفعل إنشاء هذا TempData المحتوى لم تتخذ طريقها إلى الدورة بعد ؟

  2. في أي من ثابت مخصص الطبقات (المنطق) أنا فقط تحديد الممتلكات العامة لهذه القيمة و أنا استخدامها كلما دعت الحاجة.هذا حقل ثابت لا تضيع بين OnActionExecuting() وفعلا تنفيذ وحدة تحكم الأسلوب ؟ هل هناك أي قضايا أخرى مع احتمال فقدان هذه القيمة أثناء معالجة الطلب على الخادم ؟

هل هناك أي/خيارات أفضل أنا havem لا تعتبر حتى الآن ؟

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

المحلول

لقد وجدت أن استخدام ActionParameters يجعل التعليمات البرمجية الخاصة بك بسهولة جدا قابل للاختبار.يمكنك أن تفعل ذلك كما يلي:

// inside your actionfilter
public override void OnActionExecuting(ActionExecutinContext context)
{
    var someData = // ... load some data

    context.ActionParameters["someData"] = someData;
}


// and then in your action method
[ProvideSomeData]
public ViewResult Index(SomeData someData)
{
    // someData will be populated in here
}

نصائح أخرى

re:#2

فقط أردت أن أشير إلى أن المشكلة مع حقل ثابت هو أن طلبات متعددة سوف يكون باستخدام نفس حقل ثابت.إذا كان لديك اثنين من الطلبات المنفذة بالتزامن هناك دائما فرصة أن طلب ب الكتابة طلب قيمة عليك أن تكون باستخدام قيمة خاطئة عند عمل طلب ينفذ.

كنت تجنب استخدام أعضاء ثابتة لعقد طلب معلومات محددة.

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