c# - 堆栈不足,无法继续安全地执行程序。 ASP.NET MVC 4

标签 c# asp.net asp.net-mvc asp.net-mvc-4 actionresult

我的搜索功能似乎在无限循环中继续,每次我的调试命中 POST 操作结果下方的操作时都会被触发。

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

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

这是出现以下错误的部分:

Insufficient stack to continue executing the program safely. This can happen from having too many functions on the call stack or function on the stack using too much stack space.

在我的 SearchController 中,我有一个获取和发布操作结果的方法:

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

这个返回一个包含以下内容的部分 View :

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

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

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


    }

它返回一个带有 View 模型的 View ,其中包含与查询匹配的项目。

当我调试它时,一切正常,但一切似乎都在无限重复。

搜索结果的 View 如下所示:

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

到底是哪里出了问题导致了这个无限循环?我该如何解决?

在堆栈跟踪中我发现了这些异常

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

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

这个异常似乎在重复出现

最佳答案

母版页中的

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

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

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

关于c# - 堆栈不足,无法继续安全地执行程序。 ASP.NET MVC 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16658803/

相关文章:

c# - 如何在 Jonathan Oliver 的 EventStore 中获取配置了连接字符串的 SqlPersistence 实例?

c# - 将多个文本框的相似验证与不同的验证结果文本结合起来

javascript - ASP.NET Ajax 出现错误,代码为 0

javascript - 获取表 mvc 中每行的复选框成功值

c# - 当我重定向时 Controller 方法参数为空

c# - 将字节数组传递给 T4 模板代码到另一个相同类型的数组

c# - 无法将源类型转换为目标类型

c# - 是否有 Jeff Atwood 的 C#/Winforms .Net 3.5+ 的用户友好异常处理(或类似的)?

c# - ASP.NET MVC HtmlHelper Razor 语法

c# - ADO.Net:在解决方案中的多个项目之间共享实体 (.edmx)