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# - 在c#中从字符串中获取变量数据

c# - 使用日历选择器后按钮控件不参与

javascript - 没有回发的按钮?

javascript - Kendo MVC 网格过滤器自定义不起作用

asp.net-mvc - 如何防止 Mono MVC3 应用程序中的内存泄漏?

c# - Asp.net MVC加载模块及探测位置

c# - SwaggerUI 不显示枚举摘要描述,C# .net 核心?

c# - vtables是如何在c++和c#中实现的?

c# - 更新 Entity Framework 模型后,Visual Studio 看不到更改

javascript - 不断丢失 session 状态 ASP.NET