Question

J'ai un contrôleur de base qui prend une couple de génériques, rien de trop de fantaisie.

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

ok, pas de problème.J'ai une méthode "CompleteForm" qui prend dans le viewModel, regarde un peu comme ça ...

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

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

Problème, c'est le contrôleur qui hérite de ce, comme

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

Je finis par obtenir une erreur de MvcContrib - Contrôleur nom doit se terminer par "Contrôleur" à ce point ...

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

L'expression qui est passée est correcte (SystemBaseController blahblah) mais je ne sais pas pourquoi sa 1.) en disant: il n'y a pas de contrôleur à la fin, et 2.) si je sors le tout dans le contrôleur (de la base), fonctionne très bien.Ai-je besoin d'écrire ou de configuration une sorte d'action de filtre de mes propres ou ce qui me manque?

Était-ce utile?

La solution

OK, maintenant que je vois tout cela écrit, je crois que je vois le problème.

MvcContrib chiffres qui contrôleur d'appeler le déduire à partir de la expression lambda que vous avez passé en, pas le type de contrôleur.Donc quand vous dites this.RedirectToAction(c => c.FormInfo(viewModel));, il ressemble à l'expression lambda et en déduit que T est de type SystemBaseController<TForm, TFormViewModel>, pas SalesFormController.

Ce que vous avez à faire est de changer votre classe de base pour SystemBaseController<TForm, TFormViewModel, TController> de sorte que vous pouvez dire this.RedirectToAction<TController>(c => c.FormInfo(viewModel));.Qui pourrait fonctionner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top