2010-01-14 21 views
7

Llamo a un método estático dentro de mi capa de lógica de negocios que, para fines que no mencionaré aquí, necesita hacer el redireccionamiento en lugar de devolver información al controlador para hacer la redirecciónRedirecciona la página asp.net mvc de la clase de lógica de negocios

Me imagino que necesito usar el objeto HttpContext pero estoy luchando para crear la ruta. No puedo simplemente hacer context.Response.Redirect ("someController/someMethod) porque necesito incluir parámetros para el controlador de acción al que estoy enviando al usuario.

Suponiendo que esto es correcto:

HttpContext context = HttpContext.Current; 

Puede alguien por favor proporcionar alguna ayuda de sintaxis con la forma de crear una ruta utilizando un objeto como:

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

TIA

Respuesta

11

Muy feo, anti -MVC, no lo hagas en la capa de negocios, etc ... pero ya que estás preguntando:

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

Inicialmente respondí, pero eliminé cuando vi el suyo, coincidí muy en contra de MVC pero mejor que mi respuesta – Pharabus

+0

Muchas gracias. Lo hice funcionar usando tu muestra como guía ... lo hice de una manera un poco diferente, pero no podría haberlo hecho sin tu ayuda. Básicamente estoy haciendo un control de seguridad en contra de la base de datos y lanzando una excepción en el BLL si no pasa, que es por lo que necesito redireccionar desde allí. Dices muy anti-MVC ... ¿dónde sugieres que coloque este cheque para que arroje una excepción personalizada? En el controlador? – Kyle

+0

Sugiero que arroje la excepción en el BL, atrapándolo en el controlador y realice la redirección ** en ** el controlador. –

Cuestiones relacionadas