我建议使用该方法的additionalViewData参数,对异构对象列表(即 BasketItem 子类)更有用的另一种解决方案DisplayFor
,例如:
@DisplayFor(b=>b.Items, new { layout="row" })
通过这种方式,助手可以正常工作IEnumerable<T>
,为每个项目(T 的子类)调用相关的DisplayTemplate ,并将字典中的AdditionalViewData值传递给它。ViewData
模板可以为不同的布局值输出不同的代码。
在上面的示例中,名为 View\Shared\DisplayTemplates\ BasketItem的模板(或子类的名称)应如下所示:
@model MyProject.BasketItem // or BasketItem subclass
@{
string layout = ViewData["layout"] as string ?? "default";
switch(layout)
{
case "row":
<div class="row">
...
</div>
break;
// other layouts
...
default: // strongly recommended a default case
<div class="default-view>
...
</div>
break;
}
}
强烈建议始终提供默认代码。
我希望这个建议能有所帮助。