c# - C# MVC 中的 System.StackOverflowException,.cshtml 文件中有许多变量
问题描述
我的项目中有一个大.cshtml
文件,其中包含大约 4000 行代码(HTML 和 .NET 变量)。System.StackOverflowException
直到今天一切正常,但现在我在添加更多变量后收到了一个。
再次删除一些行后,我意识到我必须在cshtml
文件中达到最大变量。
我使用创建新 ASP.NET 项目时自动创建的 ASP.NET 模板网站重现了该问题。我已经添加了@ViewBag.Title
大约 5000 次线路并再次收到了System.StackOverflowException
.
对我来说,这个异常没有任何意义,因为项目应该逐行执行,以便堆栈永远不会溢出。
我错过了什么吗?有谁知道我可以如何处理它,除非在将数据发送给用户后通过 JavaScript 插入数据?
解决方案
我可以确认这个问题很容易重现。只需从默认模板创建一个新的 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
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>
这总共是 10 000 次,<span>@ViewBag.Title</span>
并且一切正常。
推荐阅读
- javascript - 通过两个标签小部件作为下拉菜单在博客平台中搜索
- python - 第一次使用 lua 加载模型时,lua 文件中的 model:forward() 显示分段错误
- sql - 将日志转换为每天的平均用户数
- apache-spark - apache spark 独立调度程序 - 为什么驱动程序在“集群”模式下需要一个完整的核心?
- python - 一次分布嵌套列表一个元素
- javascript - jQuery for setting value of an input type with selected radio value
- webpack - Webpack:如何只导入所需的字体真棒图标?
- wordpress - Woocommerce 单产品页面挂钩
- machine-learning - fizyr 使用视网膜网络进行汽车损坏检测的过度拟合(回归和分类)
- mysql - 如何设置在TestContainers启动的Docker实例上运行的mysql全局变量