Сбой рекурсивного «рендеринга частично» в представлении веб-форм .NET MVC - PullRequest
0 голосов
/ 08 февраля 2019

Я работал над унаследованным приложением и наткнулся на страницу ascx, которая работала примерно так:

class Element
{
    ...
    public List<Element> Children { get; set; }
}
<%@ Control Language="C#" 
Inherits="System.Web.Mvc.ViewUserControl<System.Collections.Generic.IList<Element>>" %>

<% for (int i = 0; i < Model.Count; i++)
   { %>
        < Do Stuff >

    <% if (Model[i].Children.Count != 0)
       { %>
            <%= Html.Partial("~/Views/Shared/ThisView.ascx", Model[i].Children) %>
    <% } %>
<% } %>

Проходя по нему, представление, казалось, работало, как и ожидалось, оновизуализировал <Stuff> для первого объекта верхнего уровня.В его списке Children было 5 дочерних элементов, у первых 2 объектов не было собственных дочерних элементов, а у третьего -.Первые 2 визуализировались в порядке, и он просверлил до третьего и отобразил его дочерний элемент.

1st    2nd    3rd
0 ---> 0 ---> No Children
1      1 ---> No Children
2      2 ---> 0 ---> No Children
3      3
4      4
..
...

Однако после рендеринга первого объекта 3-го уровня рекурсия не была отменена .NET.Основной контент ASPX отображается правильно за пределами этого частичного представления.Я не мог понять, что здесь происходит не так, поэтому я в конце концов реализовал его заново, используя страницу «Razor» , как в этом примере , и метод @helper, который позволял выполнять рекурсиювсе на одной странице.Это сработало, но я хотел бы знать, если это ограничение .NET с Webforms или частичной рекурсией представления, или что-то еще.

Сначала я подумал, что, возможно, переменная "i" переназначается, но, похоже, это не так.Никаких исключений также не было.Я спросил своего босса, уверен ли он, что этот дисплей когда-либо отображается правильно, и он сказал, что не знает.

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