Frage

Wir haben eine steckbare Rahmen, zurück ActionResult Objekte, machen die Dinge in einem browser anzuzeigen.Ein late breaking Voraussetzung ist, dass unsere plugins sollte aufrufbar sein, aus einem regelmäßigen ASP.NET Web-Forms-Anwendung.

So weit ich habe mit dieser, die Werke sehr einfache ActionResults:

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);        
    }
}

Sie nennen würde die oben aus einem web-Formular mit:

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"));     
}

Was muss ich sonst noch zu tun ist Haken alles up?Zum Beispiel, was ist, wenn ich zurückkehren wollte, ein ViewResult?

War es hilfreich?

Lösung

Es gibt nicht zu viele Eigenschaften, um gefälschte auf ControllerContext.

  • HttpContext - Sie haben dieses abgedeckt
  • Controller Soweit ich das beurteilen kann, keine standard-ActionResults sorgen, wenn diese ist Links null
  • RequestContext - Wird automatisch aufgefüllt, wenn Links null
  • RouteData - Gefüllt werden mit eine leere Sammlung, wenn Links null.

Sie sind also nur übrig zu sorgen, dass die ActionResult-könnte hängen auf beliebigen Tasten vorhanden in RouteData.Ein ViewResult sollte glücklich sein, so lange wie Sie füllen Aktion und controller so, dass er weiß, wo Sie zu suchen für die view-Datei.Wenn Sie ändern Ihren code, um eine RouteData mit diesen Werten, sollten Sie auf OK.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top