Controller-äquivalent von HttpContext.Aktuelle in ASP.NET MVC
Ich würde gerne Zugriff auf die aktuelle Ausführung-Controller, so dass ich verschieben kann die Rückgabe der entsprechenden ActionResult auf eine helper-Methode. Zu diesem Zweck, ich bin auf der Suche nach den Gegenwert von dem, was ich gedacht hätte wäre ControllerContext.Aktuell ist es aber nicht. Danke!
Edit zur Klarstellung: ich habe eine generische Formular-Steuerelement, das ist JavaScript-basiert ist, aber ich möchte noch hinzufügen, eine option, so dass es funktioniert mit noscript. Im moment ist meine Steuerung setzt das ViewData.Modell einer JSON-freundlich-Modelle.FormResponse<T>.
Diese FormReponse eingerichtet ist, mit dem status des post-und Fehlermeldungen erzeugt wurden, so möchte ich eine GetActionResult () - Methode, die nicht das script/noscript prüfen (eine versteckte form input) und entweder:
- Legt das Modell auf die JSONed FormResponse und gibt eine Ansicht () oder
- Serialisiert die FormResponse die Sitzung und gibt einen Redirect().
Da dies offensichtlich ändert sich der Rückgabewert und die ich nicht überprüfen wollen, mich jedes mal, muss ich anrufen Anzeigen oder leiten Sie aus dem FormResponse ist GetActionResult Methode, um dies als:
return formResponse.GetActionResult();
Weiß ich, mit einem mehr astronautical design dies könnte sogar die robusten, aber mehr als die noscript-option ist nicht eine wichtige Funktion in dem moment, ich muss nur um eine schnelle Lösung zu arbeiten, die nicht brechen andere Dinge.
Update #2
Den folgenden, implementiert in einer Klasse ActionResult, macht den job für mich. Dank 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);
}
- Wo wollen Sie diesen Zugang, deiner Meinung nach??
- Was ist eine generische form der Kontrolle? Ist es ein ViewUserControl<T>?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Statik sind schlecht für Testbarkeit, und sehr viel davon abgeraten und MVC.
Warum wollen Sie den Zugriff auf die aktuellen controller-und action-Methode?
Der beste Weg, dies zu tun ist, um implementieren Sie Ihre eigenen ActionFilter.
Dies gibt Ihnen ein Mittel, das abfangen von Anfragen vor oder nach Aktionen, die Methoden auszuführen.
BEARBEITEN:
Durch das abfangen das Ergebnis innerhalb OnActionExecuted der filter können Sie Ihre noscript/script prüft, und ändern Sie Ihre ViewData entsprechend für den Verbrauch durch die Anzeigen.
Innerhalb OnActionExecuted, können Sie auch die noscript prüfen, und haben die vollständige Kontrolle über das endgültige ActionResult oder ViewData, wie Sie bitte.
Oder Sie können schreiben Sie Ihre eigenen ActionResult, dass alle diese Entscheidungen.
Also, dein controller-Aktion letztlich nicht
Es scheint nicht ein Weg, um zu navigieren, um den aktuellen Controller aus einem thread. Das ist, könnte man das ControllerBuilder und Sie können das MvcHttpHandler aber weder können Sie dann den Zugriff auf die controller-Instanz, die die Prozedur verwendet.