У меня недавно возникла странная проблема. У меня есть таблица в db с именем Task. Задача может иметь родительскую задачу и несколько дочерних задач (самостоятельное присоединение). я написал хранимую процедуру, которая возвращает мне все задачи в проекте, их дочерние и дочерние дочерние элементы до n уровня, используя CTE (общее табличное выражение). мой требуемый результат следующий: asp.net mvc рендеринг html рекурсивно
результат успешно достигнут. вы можете увидеть отступы в первом столбце, чтобы показать иерархическое отношение. проблема в том, что я делаю это «плохо». Ниже мой взгляд код
<table cellspacing="0">
<%foreach (var it in Model.list.Where(x=>x.ParentID == null))
{
int x = 1;%>
<tr>
<td width="150"><div class="wrapper" style="width:18px;"> </div><%:it.TOC %></td>
<td><%:it.label %></td>
<td><%:it.StartDate%></td>
<td><%:it.EndDate%></td>
<td><%:it.smallDescription %></td>
</tr>
<%=Model.CallRecursion(it,Model.list,ref x) %>
<%} %>
и можно видеть, что метод вызова рекурсии был определен на модели, которая возвращает HTML-строку рекурсивно. ниже приведен код метода CallRecursion.
public string CallRecursion(TempModel item, List<TempModel> all,ref int count)
{
if(all.Where(x=>x.ParentID == item.ID).Count() == 0)
return "";
else
{
count++;
string retval = "<tr>";
foreach (var kids in all.Where(x => x.ParentID == item.ID))
{
retval += "<td><div style='width:"+count*18+"px;' class='wrapper'> </div><span>" + kids.TOC + "</span></td><td>" + kids.label + "</td><td>" + kids.StartDate + "</td><td>" + kids.EndDate+"</td><td>"+kids.smallDescription+"</td></tr>"+
CallRecursion(kids, all,ref count);
}
count--;
return retval;
}
}
Мой вопрос: как я могу достичь этой цели более чистым способом. я понятия не имею, могу ли я вызывать частичные представления рекурсивно, чтобы отобразить html, и если да, то какова будет динамика. комментарии и предложения приветствуются.
@ahmed спасибо за быстрый ответ ур. на самом деле запрос CTE был написан моим боссом, и он не пробовал. позвольте мне спросить, может ли он удобно дать мне уровень дерева в запросе. логически, ваш ответ очень правильный. Я благодарю вас за такой всесторонний ответ –