如何在MVC4中显示数据库数据的树视图结构

时间:2014-12-17 07:31:25

标签: asp.net-mvc-4

我正在尝试在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>
}

2 个答案:

答案 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;与先前的贬值相同,如果它相等,则不要创造它。