我有一个递归数据结构,我希望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很新。
答案 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包的一部分。