0

S'Ok,给定以下模型:-

public class SomeViewModel
{
    public IAnimal Animal { get; set; }
    public Exception Exception { get; set; } 
}

一个IAnimal可以是这个..

public class Cat : IAnimal { .. } 
public class Dog : IAnimal { .. }

并给出以下 Razor 代码

.. snip ..


@if (Model.Animal!= null)
{
    Html.DisplayForModel(Model.Animal);
}
else if (Model.Exception != null)
{
    Html.DisplayForModel(Model.Exception);
}

@Html.ActionLink("Lets go back home.", "Index")

如果模型实例是其中之一,则视图不会渲染猫或狗的属性。

现在,这些模型中的每一个都只是一些字符串和布尔值等。所有原始类型。

所以我想,如果我只是传入模型,它应该被渲染。

有人对我可能做了什么有任何建议,错了吗?

另外 - 对于奖励积分,是否可以为这两个类之一创建一个显示模板 - 比如说这个Cat类 - 并让它只显示 instelf?例如。告诉它显示自己,而不是我手动创建Html.Label...等。

4

2 回答 2

0

请记住,如果您依赖元数据注释来允许在视图中进行自动渲染(例如属性标题、验证等),那么使用接口会有些痛苦。MVC 引擎将尝试从接口而不是具体类型中提取元数据,至少这是它使用内置模板所做的。您可以通过检查具体类型并根据其类型加载元数据来覆盖模板以绕过此限制。这是可行的,但我不推荐它,因为它会影响性能。

于 2012-10-14T18:43:14.570 回答
0

可以为Cat/创建显示模板Dog,(与不能用于模板的界面不同)。

您可以通过Cat.cshtml在 Shared\DisplayTemplates 文件夹下创建一个文件来执行此操作,但在此模板中,您必须手动设置您希望此模板呈现的 html。

编辑 作为你的第一个问题 - 我不认为DisplayForModel你正在寻找什么,你provbbaly需要的是DisplayFor

于 2012-10-14T13:47:51.553 回答