Подтвердить что ты не робот

Ошибка выполнения дочернего запроса для обработчика

У меня есть представление MVC 4, где я выполняю следующие действия

@{
    Html.RenderAction("Index", "Logo");
    Html.RenderAction("Index", "MainMenu");
}

У меня есть форма на моем представлении, которая заполняется и отправляется на контроллер. В контроллере я выполняю некоторые задачи, а затем отправлю модель обратно в мое представление

[HttpPost]
public ActionResult Index(ManageAdministratorModel manageAdministratorModel)
{
     // I save some of the fields to the database here.
     return View(manageAdministratorModel);
}

Когда я перенаправлен на представление, я получаю следующую ошибку

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

в этой строке

Html.RenderAction("Index", "Logo");

Любая идея, почему это происходит?

4b9b3361

Ответ 1

Хорошо, я нашел проблему, надеюсь, это поможет кому-то в будущем.

Контроллеры для частичных представлений содержали атрибут [HttpGet]. Например

[HttpGet]
public ActionResult Index()
{
}

Я удаляю атрибут с обоих контроллеров

public ActionResult Index()
{
}

и теперь все работает.

Ответ 2

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

Если вы нажмете "Продолжить", чтобы пройти мимо ошибки, вы увидите фактическое сообщение об ошибке, отображаемое в окне браузера, из которого вы его загрузили.

Исправьте ошибку в частичном представлении, и это сработает!

Ответ 3

Заменить:

return View(manageAdministratorModel);

с:

return PartialView(manageAdministratorModel);

в противном случае вы можете заканчиваться бесконечным циклом, потому что вы визуализируете представление, которое пытается отобразить представление, которое пытается отобразить представление,...

Также вам может потребоваться удалить атрибут [HttpPost] из вашего дочернего действия.

Ответ 4

Пример "Только действие с детьми":

     public class FiltersController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        [ChildActionOnly]
        public ActionResult Departments()
        {
            string s = "Mahi and kallu";
            return View(s);
        }

    }

**for this am creating 2 views** 
1) Index:

    <html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div>
         @Html.Partial("Departments","Filters")

</body>
</html>
**and for Departments View:**
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Departments</title>
</head>
<body>
    <div>
       @Model      
    </div>
</body>
</html>


the ***childactions*** can be rendered with the help of "Partial" keyword.

Ответ 5

Извлеките макет @{ Layout = null; } в дочернем представлении.

Ответ 6

У меня была точно такая же проблема, и поскольку я использовал маршрутизацию атрибутов, внутреннее сообщение об ошибке исключения было:

No matching action was found on controller ''. 
This can happen when a controller uses RouteAttribute for routing, 
but no action on that controller matches the request.

Удалите атрибуты [HttpGet] из методов действий, вызванных Html.Action(), и он работает. Не имеет никакого отношения к маршрутизации.

Ответ 7

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

Ответ 8

У меня была эта проблема. Это может произойти, потому что движок рендеринга не может найти никакого представления (соответствующего имени, указанному в acton). Я дал неправильное имя представления (я ошибочно дал имя действия вместо имени представления), когда я возвращаю имя представления и модель представления с помощью метода PartialView(), я исправил свое имя вида и работал нормально

Ответ 9

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

 try 
    {           
         @Html.RenderAction("Index", "Logo", new {id = Model.id});
    }
    catch (Exception e)
    {
        throw;
    }    

Выполните его с точкой прерывания в линии броска и проверьте внутреннее исключение "e". Моя проблема заключалась в том, что я изменил имя параметра на моем контроллере и забыл изменить его на моем представлении.

Легче получить ошибку, используя try catch.

Ответ 10

Я столкнулся с той же проблемой, но я поместил атрибут [HTTPGet] поверх имени функции, и это сработало для меня.

[HttpGet]
//for Filter parital view
[ChildActionOnly]
public ActionResult Filter()
{ 
  // Your code will come here.
}

Ответ 11

Это случилось со мной, потому что я звонил из разных мест.

Представление, которое я хотел вызвать, находилось за пределами области, поэтому при вызове из-за пределов всех областей выполняется вызов типа

.@Html.RenderAction("Index", "Logo");

будет работать без проблем.

Но когда я хотел, чтобы это же представление вызывалось из другого представления, находящегося внутри области, мне нужно было добавить некоторую дополнительную информацию к вызову, чтобы сделать его явным:

@Html.RenderAction("Index", "Logo", new { area = "" });

Ответ 12

В моем случае я добавил следующий код в Global.asax.cs:

protected void Application_Error(object sender, EventArgs e)
{
    var ex = Server.GetLastError();
    ...
}

Затем я добавил точку останова и увидел, что ex InExException является ошибкой подключения к БД SQL. Поэтому я заменил свой файл Web.config на локальный файл разработки с правильной строкой подключения, и проблема исчезла.