我写了一段代码,从赞助商列表中返回一个随机字符串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提供了错误的参数,但我不知道它是什么。
有没有人有类似的问题或者知道如何解决这个错误,我都是耳朵。
此致
答案 0 :(得分:2)
问题在于RandomSponsor
部分视图似乎已将_Layout.chtml
设置为布局,
所以你有这个场景:
_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放在其视图中。
让视图以递归方式呈现自己的动作是没有意义的。