2010-01-14 8 views
7

Ich rufe eine statische Methode innerhalb meiner Business-Logik-Schicht, die für Zwecke, die ich hier nicht erwähnen werde, muss die Weiterleitung selbst zurückgeben Informationen zurück an den Controller zu tun die Umleitung.Redirect asp.net mvc Seite von Business-Logik-Klasse

Ich denke, ich muss das HttpContext-Objekt verwenden, aber ich habe Probleme mit der Erstellung der Route. Ich kann context.Response.Redirect ("someController/someMethod) nicht einfach tun, weil ich Parameter für den aktionscontroller einschließen muss, zu dem ich den Benutzer sende.

dies Unter der Annahme korrekt ist:

HttpContext context = HttpContext.Current; 

Kann jemand bitte einig Syntax-Hilfe mit, wie bietet eine Route mit einem Objekt wie zu erstellen:

new { Controller = "MyController", action = "Index", OtherParm="other value" } 

TIA

Antwort

11

Sehr hässlich, anti -MVC, nicht in Business-Schicht, etc ... aber da Sie fragen:

var context = new RequestContext(
    new HttpContextWrapper(System.Web.HttpContext.Current), 
    new RouteData()); 
var urlHelper = new UrlHelper(context); 
var url = urlHelper.Action("Index", new { OtherParm = "other value" }); 
System.Web.HttpContext.Current.Response.Redirect(url); 
+0

Ich antwortete zunächst, aber gelöscht, als ich Ihre sah, stimmte sehr gegen MVC aber besser als meine Antwort – Pharabus

+0

großen Dank viel. Ich habe es funktioniert mit Ihrer Probe als Leitfaden ... tat es ein bisschen anders, aber hätte es nicht ohne Ihre Hilfe getan. Im Grunde mache ich eine Sicherheitsüberprüfung gegen die Datenbank und werfe eine Ausnahme auf die BLL, wenn sie nicht besteht, weshalb ich von dort weiterleiten muss. Du sagst sehr Anti-MVC .... wo würdest du vorschlagen, dass ich diesen Check setze, um es eine benutzerdefinierte Ausnahme werfen zu lassen? Auf dem Controller? – Kyle

+0

Ich schlage vor, Sie werfen die Ausnahme in die BL, fangen sie in der Steuerung und führen die Umleitung ** in ** der Steuerung durch. –