ControllerContext est null
J'ai cette MVC4 contrôleur (ControllerB
):
public class MyControllerB : Controller
{
public bool Check(string actionName, ControllerBase controllerBase)
{
ControllerContext controllerContext = new ControllerContext(this.ControllerContext.RequestContext, controllerBase);
...
}
}
Je vais appeler ControllerB de la méthode de contrôle de "ControllerA", comme suit:
bool b = new MyControllerB().Check("Index", this);
- Je obtenir Object reference not set to an instance of an object
parce que this.ControllerContext
est null.
Si je bouge la méthode de contrôle de ControllerA, il fonctionne très bien. Mais j'ai besoin de cette méthode sur un autre contrôleur. Comment puis-je corriger mon code pour que `ce.ControllerContext` ne sera pas nulle?
avez-vous essayé de faire la méthode statique dans le contrôleur de b, de sorte que vous n'avez pas à instancier le contrôleur?
Pourquoi auriez-vous besoin d'appeler la méthode de contrôleur différent, peut-être créer un BaseController et de mettre votre méthode?
Comment est-ce que cela va résoudre le problème?
Pourquoi auriez-vous besoin d'appeler la méthode de contrôleur différent, peut-être créer un BaseController et de mettre votre méthode?
Comment est-ce que cela va résoudre le problème?
OriginalL'auteur Administrateur | 2013-09-27
Vous devez vous connecter pour publier un commentaire.
La
ControllerContext
est nul parce que vous créez manuellement leControllerB
instance deControllerA
.Normalement,
IController
des instances sont créées par le régime enregistré d'IControllerFactory
, généralementSystem.Web.Mvc.DefaultControllerFactory
. Le contrôleur d'usine denew()
l'instance et d'initialiser les paramètres correctement.@DZL dit, il est généralement beaucoup mieux d'avoir les deux contrôleurs de la sous-classe des
BaseController
de classe, qui peuvent avoir partagé l'initialisation et partagé des propriétés et des méthodes.Je ne comprends pas la logique métier de ce que vous essayez de faire, mais voici un exemple de code à l'aide de la classe de base de l'2 contrôleurs:
Si vous voulez vraiment faire exactement ce que vous demandez, vous aurez à appeler
IControllerFactory.CreateController(requestContext, controllerName)
au lieu denew ControllerB()
, mais ça, c'est très alambiqué façon de faire les choses - je ne le recommande pas.OriginalL'auteur Raul Nohea Goodness