MVC中的递归函数查看aspx页面

时间:2011-07-06 18:19:40

标签: asp.net-mvc

我有一个递归数据结构,我希望ASP.NET走进MVC程序的View部分。我不清楚这是否可行。这是C#中模型类的定义:

Public class recursive_data_structure
{
   public List<recursive_data_structure> Children;
   //some_class is defined elsewhere, it is irrelevant
   public some_class Me;
}

ViewModel包含此类的实例。有没有办法在ASP.NET(使用MVC)中遍历模型,以便我可以进行某种递归的HTML生成?

如果这个问题措辞不清楚或显而易见,请道歉。我对MVC很新。

2 个答案:

答案 0 :(得分:4)

您尝试呈现分层树,有很多方法可以在ASP.NET MVC中执行此操作。您可以使用部分视图,如下所示。

这是您的简单分层模型

public class HierarchicalModel
{
    public HierarchicalModel()
    {
        this.Children = new List<HierarchicalModel>();
    }

    public String Name { get; set; }
    public List<HierarchicalModel> Children { get; set; }
}

然后在您创建/获取模型的一个操作中将其放入视图包中。

public ActionResult Index()
{
    ViewBag.Message = "Welcome to ASP.NET MVC!";

    var level0 = new HierarchicalModel() { Name = "item 0, level 0" };
    level0.Children.Add(new HierarchicalModel() { Name = "item 0, level 1" });
    level0.Children.Add(new HierarchicalModel() { Name = "item 1, level 1" });
    level0.Children.Add(new HierarchicalModel() { Name = "item 2, level 1" });
    var level1 = new HierarchicalModel() { Name = "item 3, level 1" };
    level1.Children.Add(new HierarchicalModel() { Name = "item 0, level 2" });
    level1.Children.Add(new HierarchicalModel() { Name = "item 1, level 2" });
    level0.Children.Add(level1);

    ViewBag.HierarchicalModel = level0; 

    return View();
}

现在您需要创建一个名为eg的部分视图Views / Shared目录中的_HierarchicalModel.cshtml。用模型所在的命名空间替换MvcApplication4。

@model MvcApplication4.HierarchicalModel
<li>
    @Model.Name
    <ul>
    @foreach (var item in Model.Children)
    {
        @Html.Partial("_HierarchicalModel", item);  
    }    
    </ul>
</li>

然后在视图中渲染它。

@{
    MvcApplication4.HierarchicalModel model = ViewBag.HierarchicalModel; 
}

<p>
    <ul>@Html.Partial("_HierarchicalModel", model)</ul>
</p>

这是最简单的方法。无论如何,你必须关心循环引用和深层次结构。

答案 1 :(得分:1)

据我所知,MVC不会自动为你递送递归结构。

您需要做的是为List或IEnumerable创建局部视图,为recursive_data_structure创建另一个视图。

在IEnumerable模型的局部视图中:

@foreach (recursive_data_structure child in Model)
{ 
    @Html.Partial("recursive_data_structureView", child)  
}

在recursive_data_structure模型的部分视图中:

<span>Model</span>

如果你想要一个绑定到递归数据的树视图,Telerik有一个作为其免费MVC包的一部分。