Por lo tanto, tengo una acción que llamo desde un ancla, Site/Controller/Action/ID
donde ID
es un int
.
Más tarde, necesito redirigir a esta misma acción desde un controlador.
¿Hay una manera inteligente de hacer esto? Actualmente estoy ID
escondiendo tempdata, pero cuando presionas f5 para actualizar la página nuevamente después de regresar, la tempdata desaparece y la página se bloquea.
c#
asp.net-mvc
controller
redirecttoaction
Eric Brown - Cal
fuente
fuente
Return RedirectToAction("Action", "Controller", New With {.id = 99})
La respuesta de Kurt debería ser correcta, según mi investigación, pero cuando lo intenté, tuve que hacer esto para que realmente funcionara para mí:
Si no especifiqué el controlador y la acción en el
RouteValueDictionary
no funcionó.Además, cuando se codifica así, el primer parámetro (Acción) parece ignorarse. Entonces, si solo especifica el controlador en el Dict, y espera que el primer parámetro especifique la Acción, tampoco funcionará.
Si vienes más tarde, prueba primero la respuesta de Kurt, y si todavía tienes problemas, prueba esta.
fuente
controller
parámetro es opcional si la acción de redireccionamiento está en el mismo controlador que la acción desde la que está redirigiendo.RedirectToAction
con parámetro:fuente
new {id = id}
funciona igual de bien porque el marco de trabajo sabe a qué variable se refiere.También vale la pena señalar que puede pasar por más de 1 parámetro. id se usará para formar parte de la URL y cualquier otro se pasará como parámetros después de un? en la url y se codificará de forma predeterminada.
p.ej
Entonces la url sería:
Estos pueden ser referenciados por su controlador:
fuente
ejemplo
fuente
MVC 4 ejemplo ...
Tenga en cuenta que no siempre tiene que pasar el parámetro denominado ID
Y,
Por supuesto, puede asignar cadenas a los campos del modelo en lugar de usar ViewBag si esa es su preferencia.
fuente
Si su parámetro resulta ser un objeto complejo, esto resuelve el problema . La clave es el
RouteValueDictionary
constructor.Si tiene colecciones, lo hace un poco más complicado, pero esta otra respuesta lo cubre muy bien .
fuente
Trabajó para mí, no necesitaba hacer
new{id = id}
Estaba redirigiendo dentro del mismo controlador, así que no necesitaba el
"Controller"
pero no estoy seguro de la lógica específica detrás cuando se requiere el controlador como parámetro.fuente
RedirectToAction("Action", "Controller", new { id = id});
era justo lo que necesitaba en mi aplicación Core 3.1.Si alguien quiere mostrar un mensaje de error
[httppost]
, puede intentarlo pasando una ID usandopara detalles como este
Espero que funcione bien.
fuente
....
....
fuente
También tuve este problema, y una buena manera de hacerlo si estás dentro del mismo controlador es usar parámetros con nombre:
fuente
Esto podría ser hace años, pero de todos modos, esto también depende de su ruta de mapa Global.asax, ya que puede agregar o editar parámetros para ajustarse a lo que desee.
p.ej.
Global.asax
entonces los parámetros que deberá pasar cambiarán a:
fuente
Si necesita redirigir a una acción fuera del controlador, esto funcionará.
fuente
Lo siguiente tuvo éxito con asp.net core 2.1. Se puede aplicar en otro lugar. El diccionario ControllerBase.ControllerContext.RouteData.Values es directamente accesible y se puede escribir desde el método de acción. Quizás este sea el destino final de los datos en las otras soluciones. También muestra de dónde provienen los datos de enrutamiento predeterminados.
fuente