我正在尝试在mvc4中显示maintower和subtower的树视图结构(在maintower下显示subtower)。我在View中使用了以下代码。它显示的结构如
maintower1
subtower1
maintower1
subtower2
但是,我希望显示像
maintower1
subtower1
subtower2
有人可以帮我吗?
@foreach (System.Data.DataRow dr in ViewBag.treedata.Rows)
{
<div id="treeview">
@if( maintower != @Html.Encode(dr[0]))
{
maintower = @Html.Encode(dr[0]);
<ul>
<li>@Html.Encode(dr[0])
<ul>
@foreach (System.Data.DataRow drow in ViewBag.treedata.Rows)
{
if( maintower == @Html.Encode(drow [0]))
{
<a href="~/Home/Index"><li> @Html.Encode(drow [1]) </li></a>
}
}
</ul>
</li>
</ul>
}
</div>
}
答案 0 :(得分:1)
在执行以下步骤之前,请确保您的 ViewBag.treedata 按其第0列(按ViewBag.treedata.Column [0] 排序)的顺序排列
<body style="font-family : Arial; ">
@{
var name = "";
}
@foreach (System.Data.DataRow dr in ViewBag.treedata.Rows)
{
<div id="treeview">
if( name != @Html.Encode(dr[0]))
{
name = @Html.Encode(dr[0]);
<ul>
<li>@Html.Encode(dr[0])
<ul>
@foreach (System.Data.DataRow drow in ViewBag.treedata.Rows)
{
if( name == @Html.Encode(drow [0])
{
<li>@Html.Encode(drow [1])</li>
}
}
</ul>
</li>
</ul>
}
</div>
}
</body>
答案 1 :(得分:0)
你必须使用两个循环,一个用于maintower,一个用于subower
或类似的东西
@{var previousMainTower = String.Empty;
var closePreviousTag = false;}
<div id="treeview">
<ul>
@foreach (System.Data.DataRow dr in ViewBag.treedata.Rows)
{
@if(previousMainTower != dr[0])
{
if(closePreviousTag)
{
</ul>
</li>
}
<li>@Html.Encode(dr[0])
<ul>
<li>@Html.Encode(dr[1])</li>
@closePreviousTag = false;
}
else
{
<li>@Html.Encode(dr[1])</li>
@closePreviousTag = true;
}
@previousMainTower = dr[0]
}
</ul>
</div>
它不是一个完全有效的代码,它显示了你应该如何解决它。
简而言之,您必须检查循环的每个步骤是否有当前的主要内容&#39;与先前的贬值相同,如果它相等,则不要创造它。