System.StackOverflowException в C # MVC со многими переменными в файле .cshtml - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть большой .cshtml файл в моем проекте, который содержит около 4000 строк кода (переменные HTML и .NET).До сегодняшнего дня все работало нормально, но теперь я добавил System.StackOverflowException после того, как добавил еще несколько переменных.

После повторного удаления некоторых строк я понял, что в файле cshtml достигнуто максимальное количество переменных.

Я воспроизвел проблему, используя шаблон веб-сайта ASP.NET, который автоматически создается при создании нового проекта ASP.NET.Я добавил строку @ViewBag.Title около 5000 раз и снова получил System.StackOverflowException.

Для меня это исключение не имеет никакого смысла, поскольку проект должен выполнять строки одну за другой, чтобы стекникогда не бывает переполнения.

Я что-то пропустил?Кто-нибудь знает, как я могу справиться с этим, кроме как путем вставки данных через JavaScript после того, как они отправлены пользователю?

1 Ответ

0 голосов
/ 04 апреля 2019

Я могу подтвердить, что эта проблема легко воспроизводима.Просто создайте новый проект 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 &raquo;</a></p>
</div>

<div class="row">
    <span>@ViewBag.Title</span>
    @* ... *@
    @* ~ 5000 times of "<span>@ViewBag.Title</span>" *@
    @* ... *@
    <span>@ViewBag.Title</span>
</div>

Запустите ваш проект и после некоторого loooong процесса загрузки System.StackOverflowException выбрасывается из App_Web_ufrc1vtb.dll безStackTrace (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> и все работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...