«Дочерним действиям запрещено выполнять действия перенаправления» - PullRequest
8 голосов
/ 19 января 2012

У меня есть эта ошибка:

Ошибка выполнения дочернего запроса для обработчика 'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'.

с внутренним исключением:

Дочерним действиям не разрешено выполнять действия по перенаправлению.

Есть идеи, почему это происходит?

Кстати, ошибка возникает в этой строке:

@Html.Action("Menu", "Navigation")

Действие меню в контроллере навигации выглядит следующим образом:

public ActionResult Menu()
{
    return PartialView();
}

Ответы [ 6 ]

9 голосов
/ 25 марта 2013

Это случилось со мной, потому что у меня был [RequireHttps] на контроллере, и дочернее действие было вызвано с другого контроллера. Атрибут RequireHttps вызвал перенаправление

5 голосов
/ 19 января 2012

Это недопустимо, поскольку MVC уже запустил рендеринг вида в браузер (клиент).Таким образом, MVC Frameworks блокирует это, потому что клиент уже получает данные (html).Пока выполняется рендеринг, вы не можете перенаправить в дочернем представлении.

Вместо него можно вернуть RedirectToAction.

4 голосов
/ 28 января 2014

Вместо

@Html.Action("Menu", "Navigation")

Использование

@Url.Action("Menu", "Navigation")

Работало для меня:)

1 голос
/ 20 января 2014

У меня была та же ситуация, что и у Дуга, описанного выше

Мое решение: 1) Создан пользовательский контроллер фабрики. Это необходимо для получения ControllerContext в моем пользовательском атрибуте https.

public class CustomControllerFactory : DefaultControllerFactory
    {
        public override IController CreateController(RequestContext requestContext, string controllerName)
        {
            var controller = base.CreateController(requestContext, controllerName);
            HttpContext.Current.Items["controllerInstance"] = controller;
            return controller;
        }
    }
}

2) В функции Application_Start из файла Global.asax написано следующее:

ControllerBuilder.Current.SetControllerFactory(new CustomControllerFactory());

3) Определенный пользовательский атрибут https:

public class CustomRequireHttpsAttribute : System.Web.Mvc.RequireHttpsAttribute
    {
        public bool RequireSecure = false;

        public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
        {

            if (RequireSecure && !((Controller)HttpContext.Current.Items["controllerInstance"]).ControllerContext.IsChildAction)
            {
                base.OnAuthorization(filterContext);
            }
        }        
    } 

4) Использование нового атрибута для определения контроллера аккаунта: [CustomRequireHttps]

0 голосов
/ 28 августа 2018

удалить аннотацию [NoDirectAccess], если она добавлена ​​в контроллер.

и в контроллере для частичного просмотра

вернуть PartialView () вместо return View ()

0 голосов
/ 20 августа 2018

перенаправить, как это

string returnUrl = Request.UrlReferrer.AbsoluteUri;
return Redirect(returnUrl);

вместо

return redirect("Action","Controller")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...