ASP.NET MVC 3 + Razor Error: дочерним действиям не разрешено выполнять действия перенаправления - PullRequest
5 голосов
/ 13 апреля 2011

Итак, я видел этот вопрос здесь, на SO, но он действительно не решил эту проблему для меня.

У меня есть приложение ASP.NET MVC 3 + Razor, работающее на IIS5на моем ПК разработчика, а затем IIS6 для моего сервера веб-разработки.Все отлично работало, пока я его не развернул.Я бен развертывает все, без проблем на этом фронте (что я могу сказать).

Теперь я получаю это Дочерним действиям не разрешено выполнять действия перенаправления ошибка на моей странице.Я не уверен, как точно определить, где он не работает.

Я использую @ Html.Action, чтобы получить некоторые выпадающие окна с данными:

    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);
    }

Если я удалю @Строка Html.Action, страница будет отображаться.Затем он прервется, если я сделаю AJAX-запрос к действию контроллера, например:

    [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);
    }

Если это не так, как я должен перенаправить на страницу ошибки или продиктовать, какое представление возвращаетсяна пост?Любая помощь приветствуется.Спасибо.

Ответы [ 3 ]

7 голосов
/ 13 апреля 2011

Вероятно, это связано с тем, что вы получаете ошибки от службы БД при ее развертывании, которую вы не получаете локально. Это заставляет его пытаться перенаправить из дочернего действия, что вы не можете сделать.

Возможно, вы захотите попытаться получить раскрывающиеся данные в своем основном действии и поместить их в ViewModel, чтобы не использовать дочерние действия. Если это не удастся, вы можете перенаправить к содержанию вашего сердца. Для AJAX вам нужно обработать ошибки на клиенте и сделать что-то разумное, вы не можете просто вернуть перенаправление с вызова AJAX.

Этот вопрос содержит дополнительную информацию: Почему результаты перенаправления не разрешены в дочерних действиях в Asp.net MVC 2

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

если вы добавите дочернее действие (ControllerContext.ParentActionViewContext.Controller as System.Web.Mvc.Controller).Response.Redirect(Url.Action("Action", "Controller"));, оно будет перенаправлено из дочернего действия.

1 голос
/ 19 ноября 2012

У меня была похожая проблема, но я всю жизнь не мог понять, откуда происходит перенаправление.Как только я понял это, я решил опубликовать ответ на случай, если это случится с кем-либо еще.

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

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

Посмотрите на декларативный код!

В моем случае это была проблема с авторизацией, поэтому атрибут вызывал перенаправление, и мои глаза отфильтровывали существование атрибута.

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