1

我编写了一段代码,它从赞助商列表中返回一个随机字符串赞助商名称。这个赞助商名称应该在每个页面上都可见,因此我在共享的 _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 提供了错误的参数,但我不知道什么是正确的。

有没有人有类似的问题或知道如何解决这个错误,我全神贯注。

问候

4

2 回答 2

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
于 2013-06-04T21:34:39.433 回答
2

您需要将您想要子操作呈现的实际 HTML 放在其视图中。

让视图递归地呈现它自己的动作是没有意义的。

于 2013-06-04T21:59:43.147 回答