【发布时间】:2013-06-04 21:27:47
【问题描述】:
我编写了一段代码,它从赞助商列表中返回一个随机字符串赞助商名称。
这个赞助商名称应该在每个页面上都可见,因此我在共享的 _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 提供了错误的参数,但我不知道什么是正确的。
有没有人遇到过类似的问题或者知道如何解决这个错误,我都在听。
问候
【问题讨论】:
-
这没有任何意义。你想让它做什么?
-
@SLaks,最终结果应该是我网站每个页面上的随机赞助商名称。使用此代码,我尝试使用 partialView 在共享布局上呈现 RandomSponsor.cshtml 视图。
-
需要更多信息。异常是否源自
getRandomSponsor()方法?它的实现方式是什么?您能指出堆栈跟踪中记录的代码的最后一行吗?例如,如果它是从getRandomSponsor()抛出的,那么getRandomSponsor()会有一行,RandomSponsor()也有一行,那么框架代码中可能会有几行。 -
@Gijs:你的观点仍然没有任何意义。为什么该操作的视图再次调用该操作? (观点相同)
-
@evanmcdonnal 我检查了 HomeController 并且有正确的赞助商名称,因此 getRandomSponsor() 方法可以正常工作。原始问题中发布的错误详细信息确实是我从 Visual Studio 获得的唯一信息。
标签: c# asp.net-mvc view stack-overflow