Asp.net MVC 2، MvcContrib، وحدة تحكم قاعدة مع إجراءات إعادة التوجيه
-
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));
. هذا العمل من قوة.