未处理的异常System.StackOVerflowException c#

时间:2013-06-04 21:27:48

标签: c# asp.net-mvc view stack-overflow

我写了一段代码,从赞助商列表中返回一个随机字符串sponsorname。 这个sponsameame应该在每个页面都可见,所以我在shared _layout视图中调用RandomSponsor方法。 这个RandomSponsor方法基于HomeController,并且它自己的视图只包含Html.Action

在那个Html.Action,程序返回错误:

System.StackOverflowException {Cannot evaluate expression because the current thread is in a stack overflow state.}

这是我的RandomSponsor方法:

    [HttpGet]   
[ChildActionOnly]
public ActionResult RandomSponsor()
{
    var model = service.getRandomSponsor();
    return PartialView("RandomSponsor", model);
}

RandomSponsor.cshtml,程序停止

@Html.Action("RandomSponsor")

我在共享布局页面中的调用_Layout.cshtml:

@Html.Action("RandomSponsor", "Home")

当我正在调试时,我注意到RandomSponsor方法进入了它的视图,但是因为我的Html.Action再次请求该函数,所以它停留在一个循环中。我想我给RandomSponsor.cshtml视图中的Html.Action提供了错误的参数,但我不知道它是什么。

有没有人有类似的问题或者知道如何解决这个错误,我都是耳朵。

此致

2 个答案:

答案 0 :(得分:2)

问题在于RandomSponsor部分视图似乎已将_Layout.chtml设置为布局,

enter image description here

所以你有这个场景:

_Layout.chtml calls RandomSponsor, RandomSponsor first load it's layout _Layout.chtml,
_Layout.chtml calls RandomSponsor, RandomSponsor first load it's layout _Layout.chtml....till stackoverflow

答案 1 :(得分:2)

您需要将要执行子动作的实际HTML放在其视图中。

让视图以递归方式呈现自己的动作是没有意义的。