2013-05-20 36 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页面,该页面的布局引起了递归。