gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 18:27:12 24 4
gpt4 key购买 nike

我的搜索功能似乎在无限循环中继续,每次我的调试命中 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com