我的项目中有一个很大的.cshtml
文件,其中包含约4000行代码(HTML和.NET变量)。到今天为止,一切正常,但是现在我添加了更多变量后收到了System.StackOverflowException
。
再次删除一些行后,我意识到我必须在cshtml
文件中达到最大变量。
我通过使用ASP.NET模板网站(在创建新的ASP.NET项目时会自动创建)来重现此问题。我将@ViewBag.Title
行添加了大约5000次,并再次收到了System.StackOverflowException
。
对我来说,该异常没有任何意义,因为项目应一开始执行每一行,以使堆栈永远不会溢出。
我想念什么吗?除了将数据发送给用户后通过JavaScript插入数据以外,还有谁知道我该如何处理?
答案 0 :(得分:0)
我可以确认此问题很容易重现。只需从默认模板创建一个新的MVC5项目,然后将Views/Home/Index.cshtml
替换为:
@{
ViewBag.Title = "Home Page";
}
<div class="jumbotron">
<h1>ASP.NET</h1>
<p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS and JavaScript.</p>
<p><a href="http://asp.net" class="btn btn-primary btn-lg">Learn more »</a></p>
</div>
<div class="row">
<span>@ViewBag.Title</span>
@* ... *@
@* ~ 5000 times of "<span>@ViewBag.Title</span>" *@
@* ... *@
<span>@ViewBag.Title</span>
</div>
运行您的项目,并在没有进行StackTrace(System.StackOverflowException
)的情况下,从App_Web_ufrc1vtb.dll
引发了一些 loooong 加载过程StackTrace == null
。
我建议您在github上打开一个问题,但是可以通过减小.cshtml
的大小来解决此问题。例如,我这样创建局部视图_PartView.cshtml
:
<div>
<span>@ViewBag.Title</span>
@* ... *@
@* ~ 50 times of "<span>@ViewBag.Title</span>" *@
@* ... *@
<span>@ViewBag.Title</span>
</div>
然后我创建另一个局部视图_PartOfPartsView.cshtml
,如下所示:
<div>
@{Html.RenderPartial("_PartView");}
@* ... *@
@* ~ 20 times of "@{Html.RenderPartial("_PartView");}" *@
@* ... *@
@{Html.RenderPartial("_PartView");}
</div>
最后像这样修改Views/Home/Index.cshtml
:
<div class="row">
@{Html.RenderPartial("_PartOfPartsView");}
@* ... *@
@* ~ 10 times of "@{Html.RenderPartial("_PartOfPartsView");}" *@
@* ... *@
@{Html.RenderPartial("_PartOfPartsView");}
</div>
这总共是<span>@ViewBag.Title</span>
的1万次,并且一切正常。