Система C# MVC.Исключение StackOverflowException

#c# #asp.net-mvc

Вопрос:

Я получаю эту ошибку, я считаю, что это потому, что у меня Html.RenderAction(); на домашней странице один два много. Вдобавок @Html.Partial() ко всему, мой сайт в порядке, если я удалю последний, который я вставил. Который выводит список рабочих часов из таблицы. У меня есть 2 в нижнем колонтитуле, чтобы показать последние сообщения и часы. Нижний колонтитул находится на неполной странице. В общей сложности есть Login Partial , Cart Summary -- RenderAction , и Footer Partial на главной странице макета плюс, конечно RenderBody() . На странице индекса до сих пор было 2 частичных файла, и я планировал использовать больше. Все они имеют модели к таблицам, прикрепленным к ним из таблиц. Я получаю ошибку при частичном входе в систему, а иногда и в сообщениях в блоге. Если я прокомментирую тот, который я только что сделал, он отлично работает. И переход на саму страницу работает без ошибок. Сначала у меня была частичная страница в общей папке, и она просто не отображается. Я сделал все это,

   public ActionResult _Hours()
    {
        var hrs = db.OperatingHours.OrderBy(x => x.SortOrder).ToList();

        return PartialView(hrs);
    }

  public ActionResult Hours()
    {
        var hrs = db.OperatingHours.OrderBy(x => x.SortOrder).ToList();

        return View(hrs);
    }
 

Есть ли обходной путь для этого?

Комментарии:

1. Исключения Stackoverflow почти всегда связаны с бесконечным циклом-просмотр трассировки стека должен показать шаблон повторяющихся вызовов, мое предположение верно.

2. «Я считаю, что это потому, что у меня есть один или два Html.RenderAction(); на моей домашней странице.» .. нет, это из-за того, как вы написали код. Отладчик-ваш друг. Пройдитесь по ВСЕМУ написанному вами коду. @DavidTansey, безусловно, прав.

3. @DavidTansey абсолютно прав.. В моем представлении есть Foreach и пара утверждений if внутри него. Я изменил его с 2 «если» на «Если еще», и теперь он работает. Я думаю, что мне действительно не нужны были 2 була, только один. Спасибо за вашу помощь.. Я помещу решение в нижней части, чтобы завершить ответ..

Ответ №1:

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

     <ul class="list-border">
    @foreach (var item in Model)
    {
        <li class="clearfix">
            @if (item.SelOpen == true)
            {
                <span>@if (item.ShowSelect == true)
                {<text>Select</text>} @item.Day :  </span>
                <div class="value pull-right flip"> @item.OpenTime @if (item.ShowBreak == true)
                {<text>-</text> @item.BreakTime} - @item.CloseTime </div>
            }
            @if (item.SelClosed == true)
            {
                <span> @item.Day :  </span>
                <div class="value pull-right flip"> Closed </div>
            }
        </li>
    }
</ul>
 

Ниже приведен код, на который он был изменен, чтобы он работал.

     <ul class="list-border">
    @foreach (var item in Model)
    {
        <li class="clearfix">
            @if (item.SelOpen == true)
            {
                <span>@if (item.ShowSelect == true)
                {<text>Select</text>} @item.Day :  </span>
                <div class="value pull-right flip"> @item.OpenTime @if (item.ShowBreak == true)
                {<text>-</text> @item.BreakTime} - @item.CloseTime </div>
            }
            else
            {
                <span> @item.Day :  </span>
                <div class="value pull-right flip"> Closed </div>
            }
        </li>
    }
</ul>
 

Обычно я кодирую описанный выше способ с помощью `if(){ }else{}. И я думаю, что я сделал это и по-другому, но не в цикле foreach.. Урок усвоен.