Unzureichende stack zum fortsetzen der Ausführung des Programms sicher. ASP.NET MVC 4
Meine Suchfunktion scheint weiterhin in einer Endlosschleife, immer wenn meine debug trifft die Aktion unter dem BEITRAG actionresult gefeuert wird.
In meiner Masterpage.cshtml habe ich folgende Aktion:
<li>@Html.Action("Search", "Search")</li>
Dies ist der Teil, wird der Fehler mit der folgenden:
Nicht genügend stack-zum fortsetzen der Ausführung des Programms sicher. Dies kann
passiert, dass man zu viele Funktionen auf dem Aufruf-stack oder-Funktion auf
der Stapel mit zu viel stack-Speicher.
In meinem SearchController ich habe eine get-und post-actionresult Methoden:
[HttpGet]
public ActionResult Search()
{
return PartialView("SearchFormPartial");
}
Diesem kehrt man eine Teilansicht, die folgenden Inhalt haben:
@using (Ajax.BeginForm("Search", "Search", FormMethod.Post,
new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST"
}))
{
<div>
@Html.TextBox("query", "", new { @class = "search-query", @placeholder="Search news...", @spellcheck="false"})
<input type="submit" value="Search" />
</div>
}
Seine im Grunde eine form mit textbox und submit-button.
Dies ist die http-post-actionresult:
[HttpPost]
public ActionResult Search(string query)
{
if (query != null)
{
try
{
var searchlist = rep.Search(query);
var model = new ItemViewModel()
{
NewsList = new List<NewsViewModel>()
};
foreach (var NewsItems in searchlist)
{
FillProductToModel(model, NewsItems);
}
return View("Searchresults", model);
}
catch (Exception e)
{
//handle exception
}
}
return View("Error");
}
Gibt es eine view mit dem viewmodel, dass die Elemente enthält, die aufeinander abgestimmt die Abfrage.
Wenn ich Debuggen, es funktioniert alles perfekt, es scheint aber alles wiederholt sich unendlich.
Den Blick für die Searchresult sieht wie folgt aus:
@model Namespace.ViewModels.ItemViewModel
@if (Model.NewsList.Count == 0)
{
<h3 class="text-error">No items matched your search query!</h3>
}
else
{
foreach (var result in Model.NewsList)
{
//display search results
}
}
Was genau läuft hier falsch, dass die Ursache dieser Endlosschleife? und wie kann ich es beheben?
In dem stack-trace fand ich diese Ausnahmen
[HttpException (0x80004005): Error executing child request for handler
'- System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper'.]
diese Ausnahme scheint immer wiederholt
- NÖ, aber wenn die iteration erfolgt, es springt auf der masterpage.cshtml und Html.Aktion("Suche","Suche"") da ist.
- Erhalten Sie den Fehler beim buchen auf der Suche nach action?
- Ich bekomme die Fehlermeldung, wenn ich aufhören die webb app.. sonst nur seine unendliche Schleife, was bedeutet, dass, wenn ich geben Sie einen text ein und klicken Sie auf "Absenden" its just be
- Es sollte kein Problem sein, wenn Sie anrufen, die Suchen action mit GET-Anfrage, es gibt eine PartialViewResult. Sollten Sie die Fehlermeldung erhalten, wenn Sie eine POST-Anforderung.
- Wenn ich debugg die post actionresults dies ist, was passiert: es gibt eine Ansicht und der geht durch alles, was sich in der Ansicht bewegt sich auf der masterpage.cshtml, wenn es Sie trifft Html.Aktion("Suche","Suche"") . Es geht direkt an die Post actionresult und so weiter wiederholen.
- welche Routen haben Sie erklärt? nach der Lektüre Ihrer letzten Kommentar denke ich, dass etwas falsch sein könnte, passiert es
- ill update mit Arbeitsplänen 1 Sek.
- falsche denke, sorry, Ihre Routen sind in Ordnung
Du musst angemeldet sein, um einen Kommentar abzugeben.
Html.Action
im master-Seite ruft die Search-Methode mit einer POST-Anforderung, so ist der Rahmen nicht, rufen Sie die Aktion aus, gibt die Teilansicht aber die anderen, das gibt ein ViewResult mit der master-Seite. Dasselbe wird wieder geschehen, und Sie werden rekursive Aufrufe.Einfachste Lösung wäre, benennen Sie die Such-Aktion, die eine Antwort auf POST-request. Auch stellen Sie sicher, dass Ihre form Beiträge zu dieser Aktion, aber immer den gleichen
Html.Action
nennen.Scheint es bei framework immer noch versuchen, finden die Aktion reagieren kann, um eine POST-Anfrage. Entfernen
HttpGet
Attribut-Suche-Aktion wird dieses problem lösen.Seine nicht zu sehen, die Ihre Partielle Sicht als 'Teilweise Anzeigen'. Ich hatte genau das gleiche problem, aber das hinzufügen
@{ Layout = null; }
die Ansicht wird sichergestellt, dass die anzeigen nicht gesehen, als die normale Ansicht, die Lasten der _Layout-Ansicht.
Mein Problem ist, dass ich fügte hinzu, eine neue Ansicht über visual studio und fügte ein _ViewStart.cshtml-Seite, die hatte ein layout, das verursacht wurde Rekursion.