我有一个递归的数据结构,我想ASP。在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新手
您尝试呈现分层树,在ASP中有很多方法可以做到这一点。净MVC。您可以使用部分视图,如下所示:
这是你的简单层次模型
public class HierarchicalModel
{
public HierarchicalModel()
{
this.Children = new List<HierarchicalModel>();
}
public String Name { get; set; }
public List<HierarchicalModel> Children { get; set; }
}
,然后在一个操作中创建/获取模型并将其放入viewbag中。
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();
}
现在你需要创建一个局部视图,例如_HierarchicalModel。视图/共享目录下的cshtml文件。将mvcapapplication4替换为您的模型所在的名称空间。
@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>
这是最简单的方法。在任何情况下,你都必须关心循环引用和深层层次结构。
据我所知,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包的一部分。