2013-05-20 7 views
8

La mia funzionalità di ricerca sembra continuare in un ciclo infinito, ogni volta che il debug esegue l'azione al di sotto del POST actionresult viene generato.Stack insufficiente per continuare a eseguire il programma in modo sicuro. ASP.NET MVC 4

Nel mio Masterpage.cshtml ho seguenti azioni:

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

Questa è la parte che ottiene l'errore di seguire:

pila insufficiente per continuare l'esecuzione del programma in modo sicuro. Questo può fare in modo che abbia troppe funzioni nello stack di chiamate o nella funzione sullo stack utilizzando troppo spazio di stack.

Nel mio SearchController ho una GET e POST ActionResult metodi:

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

Questo restituisce una visione parziale con i seguenti contenuti:

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

La sua fondamentalmente un modulo con la casella di testo e invia pulsante.

Questa è l'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"); 


    } 

Si restituisce una vista con un ViewModel che contiene gli elementi che soddisfano le condizioni.

Quando eseguo il debug, tutto funziona perfettamente ma tutto sembra essere ripetuto all'infinito.

La vista per la searchResult assomiglia a questo:

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

che cosa sta andando exacly sbagliato qui che causano questo ciclo infinito? e come posso ripararlo?

Nella traccia dello stack ho trovato queste eccezioni

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

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

questa eccezione sembra sempre ripetuto

+0

no, ma quando l'iterazione è terminata, passa a masterpage.cshtml e l'Html.Action ("Cerca", "Cerca" ") è lì. – Obsivus

+0

Hai ricevuto l'errore quando pubblichi un'azione di ricerca? –

+0

Ottengo l'errore quando smetto di eseguire l'app webb .. altrimenti è solo un ciclo infinito che significa quando digito un testo e clic su invia il suo solo caricamento – Obsivus

risposta

8

Html.Action nella pagina master chiama il metodo di ricerca con una richiesta POST, quindi il framework non chiamerà l'azione che restituisce il partial visualizza ma l'altro che restituisce un ViewResult con la pagina principale. La stessa cosa accadrà di nuovo e tu farai delle chiamate ricorsive.

La soluzione più semplice sarebbe rinominare l'azione di ricerca che risponde alla richiesta POST. Assicurati inoltre che il modulo venga inserito in questa azione, ma tieni la stessa chiamata Html.Action.

Sembra che il framework proverà ancora a trovare l'azione che può rispondere a una richiesta POST. La rimozione dell'attributo HttpGet dall'azione di ricerca risolverà questo problema.

+0

Ho rinominato il post action result per SearchResult e all'interno della partialview sono passato a @using (Ajax. BeginForm ("SearchResult", "Ricerca", FormMethod.Post, nuove AjaxOptions, ma ora ottengo l'errore: errore durante l'esecuzione richiesta figlio per handler 'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper' – Obsivus

+0

@Obsivus Puoi lasciare un commento, fuori tutto. il codice nella tua vista parziale e vedi se ottieni lo stesso errore? –

+0

se commento fuori Non c'è casella di testo o pulsante di invio non posso testarlo se funziona o no – Obsivus

2

Non vede la vista parziale come una "vista parziale". Ho avuto esattamente lo stesso problema ma l'aggiunta di @{ Layout = null; } alla vista assicura che la vista non sia vista come una normale vista che carica la vista _Layout.

0

Il mio problema è che ho aggiunto una nuova vista tramite Visual Studio e aggiunto una pagina _ViewStart.cshtml che aveva un layout che stava causando la ricorsione.

Problemi correlati