我有一个 Item
类。我有大约 10-20 个它的衍生物,每个都包含不同类型的数据。现在,在渲染不同类型的 Item
时,我不得不使用类似的方法:
<div>
@if (Model is XItem)
{
... rendering logic 1 ...
}
@if (Model is YItem)
{
... rendering logic 2 ...
}
@if (Model is ZItem)
{
... rendering logic 3 ...
}
... goes on and on forever ...
</div>
不幸的是 @Html.DisplayFor()
在这种情况下不起作用,因为 Model
是 Item
的类型,DisplayTemplates\Item.cshtml
显示。
HTML 助手也没有帮助,因为相同的“if/is”链。
我可以将呈现逻辑合并到类本身中,并调用 @Model.Render()
但它们属于业务逻辑,而不是表示。这将是一种罪过。
@Html.Partial(Model.GetType().Name)
只有一个选项,但感觉不对。您期望没有元魔法的解决方案。有没有更好的办法?
最佳答案
使用显示模板。
在您的 ~/Views/Shared/DisplayTemplates
文件夹中,您可以添加一个与您的类型同名的 View 。
当您执行 @Html.DisplayFor(item)
时,您将获得与该特定类型相关的 View 。
更新
我刚看到您的评论 RE DisplayFor,所以如果这没有帮助,我会删除我的回答。
关于c# - 如何以不同方式呈现类的派生类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19296621/