Я работал над унаследованным приложением и наткнулся на страницу 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
" переназначается, но, похоже, это не так.Никаких исключений также не было.Я спросил своего босса, уверен ли он, что этот дисплей когда-либо отображается правильно, и он сказал, что не знает.