Asp.net MVC 2، MvcContrib، وحدة تحكم قاعدة مع إجراءات إعادة التوجيه

StackOverflow https://stackoverflow.com/questions/2463781

  •  20-09-2019
  •  | 
  •  

سؤال

ولقد حصلت على وحدة تحكم قاعدة أن يأخذ الأدوية زوجين، لا شيء أكثر من اللازم الهوى.

public class SystemBaseController<TForm, TFormViewModel> : Controller
    where TForm : class, IForm
    where TFormViewModel : class, IViewModel

وطيب، صفقة لا كبيرة. لدي طريقة "CompleteForm" التي تأخذ في viewModel، يبدو كيندا مثل هذا ...

    public ActionResult CompleteForm(TFormViewModel viewModel)
    {
          //does some stuff

          return this.RedirectToAction(c => c.FormInfo(viewModel));
    }

والمشكلة هي، وحدة التحكم التي يرث هذا، مثل ذلك

public class SalesFormController :  SystemBaseController<SalesForm, SalesViewModel>
{ }

وأنا في نهاية المطاف في الحصول على خطأ من MvcContrib - <م> يجب أن ينتهي اسم المراقب في "المراقب" في هذه النقطة ...

    public RedirectToRouteResult(Expression<Action<T>> expression)
        : this(expression, expr => Microsoft.Web.Mvc.Internal.ExpressionHelper.GetRouteValuesFromExpression(expr)) {}

والتعبير وهذا ما أقر في غير الصحيح (SystemBaseController blahblah) ولكن لست متأكدا من السبب في دورته 1.) قائلا ليس هناك تحكم في النهاية، و2.) إذا أنا سحب كل شيء في وحدة تحكم (من القاعدة )، يعمل بشكل جيد فقط. هل أحتاج لكتابة أو إعداد نوع من تصفية العمل من بلدي أو ما أنا في عداد المفقودين؟

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

المحلول

حسنا، الآن أن أرى كل هذا مكتوبة وأعتقد أنني أرى مشكلة.

وشخصيات MvcContrib من وحدة تحكم للاتصال عن طريق استنتاج من <م> التعبير امدا أنك مررت في، وليس نوع وحدة تحكم. لذلك عندما تقول this.RedirectToAction(c => c.FormInfo(viewModel));، فإنه يبحث في التعبير امدا وتستدل على أن T هو من نوع SystemBaseController<TForm, TFormViewModel>، وليس SalesFormController.

وماذا قد يكون لديك القيام به هو تغيير الفئة الأساسية لSystemBaseController<TForm, TFormViewModel, TController> بحيث يمكنك القول this.RedirectToAction<TController>(c => c.FormInfo(viewModel));. هذا العمل من قوة.

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