堆栈不足以继续安全地执行程序。 ASP.NET MVC 4

我的搜索function似乎在无限循环中继续,每次我的调试命中POST动作结果下面的操作被触发。

在我的Masterpage.cshtml中,我有以下操作:

  • @Html.Action("Search", "Search")
  • 这是得到以下错误的部分:

    堆栈不足以继续安全地执行程序。 这可能是因为调用堆栈上的函数太多或堆栈上的函数占用太多堆栈空间。

    在我的SearchController中,我有一个get和post动作方法:

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

    这个返回包含以下内容的部分视图:

     @using (Ajax.BeginForm("Search", "Search", FormMethod.Post, new AjaxOptions { InsertionMode = InsertionMode.Replace, HttpMethod = "POST" })) { 
    @Html.TextBox("query", "", new { @class = "search-query", @placeholder="Search news...", @spellcheck="false"})
    }

    它基本上是一个带有文本框和提交按钮的表单。

    这是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() }; foreach (var NewsItems in searchlist) { FillProductToModel(model, NewsItems); } return View("Searchresults", model); } catch (Exception e) { // handle exception } } return View("Error"); } 

    它返回一个视图,其中包含一个viewmodel,其中包含与查询匹配的项目。

    当我调试它时,一切都很完美,但一切似乎都无限重复。

    Searchresult的视图如下所示:

     @model Namespace.ViewModels.ItemViewModel @if (Model.NewsList.Count == 0) { 

    No items matched your search query!

    } else { foreach (var result in Model.NewsList) { // display search results } }

    导致这种无限循环的错误是什么? 我该如何解决?

    在堆栈跟踪中,我发现了这些exception

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

    ‘System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper’。]

    这个例外似乎重复了

    母版页中的Html.Action使用POST请求调用Search方法,因此框架不会调用返回局部视图的操作,而是另一个返回带有母版页的ViewResult的操作。 同样的事情将再次发生,你将进行递归调用。

    最简单的解决方案是重命名响应POST请求的搜索操作。 还要确保您的表单发布到此操作但保持相同的Html.Action调用。

    看起来框架仍然会尝试找到可以响应POST请求的操作。 从“搜索”操作中删除HttpGet属性将解决此问题。

    它没有将您的部分视图视为“部分视图”。 我有完全相同的问题,但添加@{ Layout = null; } 视图确保视图不会被视为加载_Layout视图的普通视图。

    我的问题是我通过visual studio添加了一个新视图,它添加了一个_ViewStart.cshtml页面,其中有一个导致递归的布局。