c# - 如何以不同方式呈现类的派生类型?

标签 c# asp.net-mvc razor

我有一个 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() 在这种情况下不起作用,因为 ModelItem 的类型,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/

相关文章:

c# - 将 Func<> 传递给 Select

c# - 我应该如何从 .NET MVC 应用程序中的所有函数返回通用响应和响应代码?

asp.net-mvc - ASP.NET MVC : Enforce AJAX request on an action

c# - MVC3 项目从另一个属性设置 StringLength 验证值

c# - C# 中 Java 的 .length 相当于什么?

c# - 用户能够看到其他人的详细信息。 FirstOrDefault 返回错误记录?还是缓存问题?帮助! :)

c# - ASP.NET MVC - 简单的 If Else

c# - HTML Razor 中 Step 属性的自定义错误验证

asp.net-mvc - 如何在 ASP.NET MVC 中请求 System.Net.WebPermission 类型的权限?

c# - 无法安装 Visual Studio Code 扩展