2013-05-20 45 views
8

我的搜索功能似乎在無限循環中繼續,每當我的調試命中POST actionresult下面的動作時就會被觸發。堆棧不足以繼續安全地執行程序。 ASP.NET MVC 4

在我Masterpage.cshtml我有以下作用:

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

這是獲取以下錯誤的部分:

不足棧繼續安全地執行程序。這可能是 發生在調用堆棧上的功能太多或者功能太多,堆棧空間太多。

在我SearchController我有一個GET和POST的ActionResult方法:

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

這一個返回的部分觀點,即有如下內容:

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

其basicly形式與文本框並提交按鈕。

這是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"); 


    } 

它返回一個包含與查詢匹配的項的視圖模型視圖。

當我調試它時,一切正常,但似乎無限重複了一切。

的信息搜索結果的看法是這樣的:

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

什麼exacly去錯在這裏,造成這種無限循環?我該如何解決它?

在堆棧跟蹤,我發現這些異常

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

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

這個例外似乎得到重複

+0

nope但是當迭代完成時,它跳轉到masterpage.cshtml並且Html.Action(「Search」,「Search」「)在那裏。 – Obsivus

+0

當您發佈到搜索操作時,您是否收到錯誤消息? –

+0

當我停止運行webb應用程序時,出現錯誤..其它只是無限循環,這意味着當我鍵入文本並單擊提交它的剛纔加載時 – Obsivus

回答

8

Html.Action在母版頁中用POST請求調用Search方法,所以框架不會調用返回部分的操作視圖,但另一個返回與母版頁ViewResult。同樣的事情會再次發生,你會進行遞歸調用。

最簡單的解決方案是重命名響應POST請求的搜索操作。還請確保您的表單發佈到此操作,但保持相同的Html.Action呼叫。

看來框架仍然會嘗試找到可以響應POST請求的操作。從搜索動作中刪除HttpGet屬性將解決此問題。

+0

我將postresultResult重命名爲SearchResult,並在partialview內部改爲@using(Ajax。 BeginForm(「SearchResult」,「搜索」,FormMethod.Post, 新的AjaxOptions,但現在我得到錯誤:執行處理程序的子請求錯誤'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'。 – Obsivus

+0

@Obsivus您能否註釋掉所有在你的部分視圖中的代碼,看看你是否得到相同的錯誤? –

+0

如果我註釋掉沒有文本框或提交按鈕不能測試它,如果它的工作 – Obsivus

2

它沒有將您的部分視圖視爲「部分視圖」。我有完全相同的問題,但添加 @{ Layout = null; } 視圖確保視圖不被視爲加載_Layout視圖的普通視圖。

0

我的問題是,我通過Visual Studio添加了一個新視圖,並添加了一個_ViewStart.cshtml頁面,該頁面的佈局引起了遞歸。