Ошибка выполнения дочернего запроса для обработчика
У меня есть представление 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");
Любая идея, почему это происходит?
Ответы
Ответ 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 на локальный файл разработки с правильной строкой подключения, и проблема исчезла.