>S'Ok,给定以下模型:-
public class SomeViewModel
{
public IAnimal Animal { get; set; }
public Exception Exception { get; set; }
}
IAnimal
可以是这个..
public class Cat : IAnimal { .. }
public class Dog : IAnimal { .. }
并给出以下剃刀代码
.. 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
......等。
Cat
/Dog
创建一个显示模板,(与不能用于模板的界面不同)。
您可以通过在 Shared\DisplayTemplates 文件夹下创建一个Cat.cshtml
文件来执行此操作,但在此模板中,您必须手动设置您希望此模板呈现的 html。
编辑至于你的第一个问题 - 我不认为DisplayForModel
是你要找的,你证明需要的是 DisplayFor
,如果您依赖元数据注释来允许在视图中自动呈现(如属性标题、验证等),则使用接口会有些痛苦。MVC 引擎将尝试从界面而不是具体类型中提取元数据,至少它是使用内置模板所做的。您可以通过检查具体类型并根据其类型加载元数据来覆盖模板以绕过此限制。这是可行的,但我不推荐它,因为有性能影响。