Question

Je voudrais avoir accès au contrôleur exécutant courant je peux délester le retour du ActionResult approprié sur une méthode d'assistance. A cette fin, je suis à la recherche pour l'équivalent de ce que j'aurais pensé serait ControllerContext.Current mais n'est pas. Merci!

Modifier des précisions: J'ai un contrôle de formulaire générique qui est basé sur JavaScript, mais je voudrais ajouter une option pour qu'il fonctionne avec noscript. En ce moment, mon contrôleur définit le ViewData.Model à un Models.FormResponse JSON-ified .

FormReponse est mis en place avec le statut du poste et les messages d'erreur générés, donc je voudrais une méthode GetActionResult () qui effectue le contrôle script / noscript (une entrée de forme cachée) et:

  1. Définit le modèle à la JSONed FormResponse et retourne une vue () ou
  2. Sérialise la FormResponse à la session et retourne un redirect ().

Comme cela change évidemment la valeur de retour et je ne veux pas faire moi-même vérifier chaque fois, je dois appeler ou Voir Dévier à partir de la méthode GetActionResult de FormResponse pour appeler cela comme:

return formResponse.GetActionResult();

Je sais avec une conception plus astronautique cette option noscript pourrait être encore plus robuste mais n'est pas une caractéristique importante pour le moment, j'ai juste besoin d'obtenir un travail de solution rapide qui ne casse pas d'autres choses.

Mise à jour # 2

Les éléments suivants, mis en œuvre dans une classe ActionResult, fait le travail pour moi. Merci CVertex!

public override void ExecuteResult(ControllerContext context)
    {
        if (CMSEnvironment.NoScript)
        {
            Oracle.Response.Redirect(Oracle.Request.UrlReferrer.ToString(), true);
        }

        context.Controller.ViewData.Model = _model.ToJSON();

        new ViewResult()
        {
            ViewName = Areas.Site.Helpers.SharedView.Service,
            ViewData = context.Controller.ViewData
        }.ExecuteResult(context);
    }
Était-ce utile?

La solution

sont mauvais pour Statics testabilité, et très découragé dans MVC.

Pourquoi voulez-vous pour accéder au contrôleur actuel et méthode action?

La meilleure façon de le faire est de implémenter votre propre ActionFilter . Cela vous donne un moyen d'intercepter les demandes avant ou après les méthodes d'exécution des actions.

EDIT: En interceptant le résultat à l'intérieur OnActionExecuted d'un filtre, vous pouvez faire vos chèques noscript / script et modifier votre ViewData en conséquence pour la consommation par la vue. A l'intérieur OnActionExecuted, vous pouvez également faire la vérification noscript et ont un contrôle complet sur la ActionResult finale ou ViewData, comme vous s'il vous plaît.

Ou, vous pouvez écrire votre propre ActionResult qui fait toutes ces décisions. Ainsi, votre action du contrôleur fait en fin de compte

return new MyActionResult(format_and_view_agnostic_model_object);

Autres conseils

Il ne semble pas être un moyen pour accéder au régulateur de courant à partir d'un fil. C'est que vous pourriez obtenir le ControllerBuilder et vous pouvez obtenir le MvcHttpHandler mais ne vous permet d'accéder ensuite l'instance du contrôleur que le gestionnaire utilise.

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