Comment utiliser MVC Action Results à partir de formulaires Web standard (simuler ControllerContext)?

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

Question

Nous avons un framework enfichable qui renvoie des objets ActionResult qui rendent des éléments à un navigateur. Une exigence de dernière minute est que nos plugins soient appelables depuis une application ASP.NET Web Forms classique.

Jusqu'à présent, j'ai proposé ceci, qui fonctionne pour les ActionResults très élémentaires:

public class ActionResultTranslator {

    HttpContextBase _context;

    public ActionResultTranslator(HttpContextBase context ) {

        _context = context;
    }

    public void Execute(ActionResult actionResult) {

        ControllerContext fakeContext = new ControllerContext();
        fakeContext.HttpContext = _context;            

        actionResult.ExecuteResult(fakeContext);        
    }
}

Vous appelez ce qui précède à partir d'un formulaire Web avec:

protected void Page_Load(object sender, EventArgs e) {
   HttpContextWrapper contextWrapper = new HttpContextWrapper(this.Context);
   var translator = new ActionResultTranslator(contextWrapper);
   translator.Execute(new RedirectResult("http://google.com"));     
}

Que dois-je faire d'autre pour tout brancher? Par exemple, si je voulais renvoyer un ViewResult?

Était-ce utile?

La solution

Il n'y a pas trop de propriétés à simuler sur ControllerContext.

  • HttpContext : vous avez couvert cela
  • Contrôleur - Autant que je sache, aucune actionResults standard n’est utilisée si elle est laissée nulle
  • RequestContext : sera renseigné automatiquement si laissé vide
  • RouteData : une collection vide sera remplie si elle est définie sur null.

Il ne vous reste donc plus qu'à craindre qu'ActionResult ne dépende de la présence de clés arbitraires dans RouteData. Un ViewResult doit être satisfait tant que vous remplissez les actions et le contrôleur afin qu'il sache où rechercher le fichier de vue. Si vous modifiez votre code pour fournir un RouteData avec ces valeurs, vous devriez être OK.

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