Pregunta ASP.NET MVC 3 + Razor Error: No se permite que las acciones secundarias realicen acciones de redirección


Asi lo vi esta pregunta aquí en SO, pero realmente no ha resuelto este problema para mí.

Tengo una aplicación ASP.NET MVC 3 + Razor que se ejecuta en IIS5 en mi computadora dev, y luego IIS6 para mi servidor web dev. Todo funcionó de maravilla hasta que lo implementé. Estoy desplegando todo, sin problemas en ese frente (lo que puedo decir).

Ahora estoy obteniendo esto Las acciones secundarias no tienen permitido realizar acciones de redireccionamiento error en mi página. No estoy seguro de cómo señalar dónde está fallando.

Estoy usando @ Html.Action para abrir algunos cuadros desplegables con datos:

    public ActionResult Hierarchy()
    {
        List<Store> storeList = DBService.getStores();            
        if (DBService.Error != null)
            return RedirectToError(DBService.Error);

        List<Department> deptList = DBService.getDepts();
        if (DBService.Error != null)
            return RedirectToError(DBService.Error);

        VM_Hierarchy hierarchy = new VM_Hierarchy(storeList, deptList);

        return View(hierarchy);
    }

Si elimino la línea @ Html.Action, la página se renderizará. Luego se interrumpirá si hago una solicitud AJAX a una acción del controlador como esta:

    [HttpPost]
    public ActionResult InventoryList(string fromDate, string toDate)
    {
        List<Inventory> inventories = DBService.getInventories(fromDate, toDate);

        if (DBService.Error != null)
            return RedirectToAction("Error");

        return View(inventories);
    }

Si esto no es correcto, ¿cómo se supone que debo redirigir a una página de error o dictar qué vista se devuelve en una publicación? Cualquier ayuda es apreciada. Gracias.


5
2018-04-13 15:44


origen


Respuestas:


Probablemente se deba a que está obteniendo errores de su servicio de base de datos cuando se implementa, que no está recibiendo localmente. Esto está causando que intente y redirija desde una acción secundaria, lo que no puede hacer.

Es posible que desee intentar obtener los datos desplegables en su acción principal y colocarlos todos en un ViewModel, por lo que no está utilizando acciones secundarias. Si esto falla, puede redireccionar al contenido de su corazón. Para el AJAX, deberá manejar los errores en el cliente y hacer algo sensato, no puede devolver una redirección desde una llamada AJAX.

Esta pregunta tiene más información: ¿Por qué no se permiten los resultados de redireccionamiento en acciones secundarias en Asp.net MVC 2?


7
2018-04-13 15:52



si pones en acción al niño      (ControllerContext.ParentActionViewContext.Controller as System.Web.Mvc.Controller).Response.Redirect(Url.Action("Action", "Controller")); se redirigirá desde el childaction.


2
2018-01-27 22:24



Tuve un problema similar, pero por mi vida, no pude averiguar de dónde venía la redirección. Una vez que lo descubrí, pensé que publicaría una respuesta en caso de que le pasara a alguien más.

Si la fuente de la redirección no es aparente del código imperativo, por ejemplo:

    [AuthoriseThis]
    public ActionResult Details(SomethingModel something)
    {
        return PartialView(something);
    }

Mira el código declarativo!

En mi caso, fue un problema de autorización, por lo que el atributo estaba causando la redirección, y mis ojos filtraban la existencia del atributo.


1
2017-11-19 00:41