【问题标题】:Unhandled exception System.StackOVerflowException c#未处理的异常 System.StackOVerflowException c#
【发布时间】: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


【解决方案1】:

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

让视图递归地渲染自己的动作是没有意义的。

【讨论】:

    【解决方案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
    

    【讨论】:

    • 否;部分视图没有布局。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多