5

Tengo que hacer una llamada redirecttoaction en asp.net mvc vista con parametros variables, extraída de la página de referencia de la vista (el estado de una cuadrícula).configuración cadena de consulta en redirecttoaction en asp.net mvc

Tengo (en un campo oculto) el contenido de la cadena de consulta (a veces vacío, a veces con 2 parámetros y así sucesivamente), así que tengo problemas para crear la matriz de valores de ruta.

¿Hay algunos ayudantes que me ayuden a convertir una cadena de consulta en una matriz de valores de ruta? Algo así como:

string querystring ="sortdir=asc&pag=5"; 
return RedirectToAction("Index", ConvertToRouteArray(querystring)); 
+0

ver http://stackoverflow.com/questions/1067200/how-to-add-querystring-values-with-redirecttoaction- método LQ = 1 – MVCdragon

+0

[esto tiene la solución, debe ayudarle a] [1] [1]:? http://stackoverflow.com/questions/1067200/how-to-add-querystring-values -with-redirecttoaction-method? lq = 1 – MVCdragon

Respuesta

8

para crear una solución genérica convertir su cadena de consulta de un diccionario y en el diccionario para la RouteValueDictionary.

var parsed = HttpUtility.ParseQueryString(temp); 
Dictionary<string,object> querystringDic = parsed.AllKeys 
    .ToDictionary(k => k, k => (object)parsed[k]); 

return RedirectToAction("Index", new RouteValueDictionary(querystringDic)); 
+0

esto es solo un ejemplo, el probl em es que la cadena de consulta es variable en cada llamada, incluso en el número de parámetros, por lo que quiero encontrar una solución genérica –

+0

Cambié mi respuesta a una solución genérica. – Erwin

+1

olvidó lo nuevo: devuelve RedirectToAction ("Índice", nuevo RouteValueDictionary (querystringDic)); –

2

Una limitación del uso de RedirectToAction("actionName", {object with properties}) es que RedirectToAction() no tiene la sobrecarga que acepta RedirectToAction(ActionResult(), {object with properties}), por lo que se ven obligados a utilizar cadenas mágicas para el nombre de la acción (y posiblemente el nombre del controlador).

Si utiliza el T4MVC library, que incluye dos métodos de la API ayudante de fluidez (AddRouteValue(...) y AddRouteValues(...)) que le permiten añadir fácilmente un solo parámetro de cadena de consulta, todas las propiedades de un objeto, o todo el Request.QueryString. Puede invocar estos métodos en los propios objetos ActionResult de T4MVC o directamente en el método RedirectToAction(). Por supuesto, ¡T4MVC se trata de deshacerse de las cuerdas mágicas!

Como ejemplo: supongamos que desea redirigir a una página de inicio de sesión para una solicitud no autenticada, y pasar la URL solicitada originalmente como un parámetro de cadena de consulta para que pueda saltar allí después de iniciar sesión correctamente. Cualquiera de los siguientes ejemplos de sintaxis funcionará:

return RedirectToAction(MVC.Account.LogOn()).AddRouteValue(@"returnUrl", HttpUtility.UrlEncode(Request.RawUrl)); 

o

return RedirectToAction(MVC.Account.LogOn().AddRouteValue(@"returnUrl", HttpUtility.UrlEncode(Request.RawUrl))); 
Cuestiones relacionadas