【发布时间】:2014-04-11 15:44:56
【问题描述】:
我找到了this answer,它帮助我了解了如何使用多态模型绑定以避免为我拥有的每个派生模型创建单独的控制器。
但是,我并没有完全弄清楚如何将 IEnumerable 传递给我的 EditorTemplates。通常,通过搭建我的模型,我最终会在我的视图中得到一个 IEnumerable,我可以使用 foreach 循环循环以显示所有内容。
这样的……
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.username)
</td>
<td>
@Html.DisplayFor(modelItem => item.date)
</td>
...
在常规控制器中,我会使用 return View(items.ToList());但是如何通过多态模型绑定实现相同的结果?
编辑1: 这就是我的控制器的样子..
public ActionResult Index()
{
List<Item> myList = new List<Item>()
{
new Derived1(),
new Derived2()
};
var model = myList;
return View(model);
}
从索引我调用@Html.EditorForModel()
在我的 EditorTemplates 中有这个...
@model Gear.Models.Derived1
<h3>Phones</h3>
@Html.Hidden("ModelType", Model.GetType())
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(x => x.username)
</th>
<th>
@Html.DisplayNameFor(x => x.address)
</th>
<th></th>
</tr>
<tr>
<td>
@Html.DisplayFor(x => x.username)
</td>
<td>
@Html.DisplayFor(x => x.address)
</td>
</tr>
</table>
现在就像您说的那样,EditorForModel 似乎正在通过在列表中显示两个派生模型来完成其工作,但只有 DisplayNameFor 有效...我无法使用 DisplayFor 从数据库中填充实际数据的字段。是不是我做错了什么?
【问题讨论】:
-
我没有看到你在这里做错了什么。在将模型返回到视图之前,检查您是否实际填充了模型(使用数据库中的数据)。
标签: c# asp.net-mvc polymorphism viewmodel model-binding