2013-05-20 15 views
8

Moja funkcja wyszukiwania wydaje się kontynuować w nieskończonej pętli, za każdym razem mój debug trafi akcję poniżej wyniku działania POST zostaje zwolniony.Niewystarczający stos, aby kontynuować bezpieczne wykonywanie programu. ASP.NET MVC 4

W moim Masterpage.cshtml mam następujące działania:

<li>@Html.Action("Search", "Search")</li> 

Jest to część, która dostaje się błąd z następujących elementów:

Niewystarczająca stosu, aby kontynuować wykonywanie programu bezpiecznie. Może to być spowodowane zbyt dużą liczbą funkcji na stosie wywołań lub funkcji na stosie przy użyciu zbyt dużej przestrzeni stosu.

W moim SearchController mam dostać i po ActionResult metody:

[HttpGet] 
     public ActionResult Search() 
     { 
      return PartialView("SearchFormPartial"); 
     } 

Ten zwraca częściowego widoku, które następującej treści:

@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>  
} 

Its Basicly postaci z pola tekstowego i prześlij przycisk.

To ActionResult HTTP POST:

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


    } 

Zwraca widok z ViewModel, który zawiera elementy, które dopasowane do zapytania.

Kiedy debuguję wszystko, wszystko działa idealnie, ale wszystko wydaje się powtarzać nieskończenie.

Widok na wynik wyszukiwania wygląda następująco:

@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 
    } 
} 

Co się dzieje niewłaściwy tutaj exacly że przyczyną tego nieskończonej pętli? i jak mogę to naprawić?

W ślad stosu znalazłem te wyjątki

[HttpException (0x80004005): Error executing child request for handler 

'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'.]

wyjątek ten wydaje się coraz powtarzane

+0

nie, ale po wykonaniu iteracji przeskakuje do pliku masterpage.cshtml i Html.Action ("Search", "Search" ") – Obsivus

+0

Czy pojawia się błąd podczas publikowania w akcji Search? –

+0

Błąd pojawia się, gdy przestaję uruchamiać aplikację webb. W przeciwnym razie jest to nieskończona pętla, co oznacza, że ​​kiedy wpisuję tekst i klikaję, po prostu ładuję – Obsivus

Odpowiedz

8

Html.Action na stronie głównej wywołuje metodę wyszukiwania z żądaniem POST, więc struktura nie wywoła akcji, która zwraca częściową view, ale drugi, który zwraca ViewResult ze stroną wzorcową. To samo się powtórzy, a ty będziesz wykonywał połączenia rekursywne.

Najprostszym rozwiązaniem byłoby zmiana nazwy akcji wyszukiwania, która odpowiada na żądanie POST. Upewnij się także, że Twój post jest postacią tej akcji, ale zachowuj tę samą rozmowę telefoniczną Html.Action.

Wygląda na to, że framework nadal będzie próbował znaleźć akcję, która może odpowiedzieć na żądanie POST. Usunięcie atrybutu HttpGet z akcji wyszukiwania rozwiąże ten problem.

+0

Zmieniono nazwę wyniku akcji po SearchResult i wewnątrz częściowego widoku zmieniłem na @using (Ajax. BeginForm ("SearchResult", "Search", FormMethod.Post, new AjaxOptions, ale teraz pojawia się błąd: Błąd podczas wykonywania żądania podrzędnego dla programu obsługi "System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper". – Obsivus

+0

@Obsivus Czy możesz skomentować wszystkie kod w twoim częściowym widoku i zobacz czy dostałeś ten sam błąd? –

+0

jeśli skomentuję Nie ma pola tekstowego lub przycisku przesyłania nie mogę przetestować go, czy działa czy nie – Obsivus

2

Nie widać Twojego Częściowego widoku jako "Częściowego widoku". Miałem dokładnie ten sam problem, ale dodanie do widoku @{ Layout = null; } gwarantuje, że widok nie jest postrzegany jako widok normalny, który ładuje widok _Layout.

0

Moim problemem jest to, że dodałem nowy widok poprzez studio graficzne i dodano stronę _ViewStart.cshtml, która miała układ, który powodował rekursję.

Powiązane problemy