【问题标题】:Trying to use DisplayForModel in my ASP.NET MVC app but the models are not displaying尝试在我的 ASP.NET MVC 应用程序中使用 DisplayForModel 但模型未显示
【发布时间】:2012-10-04 16:03:47
【问题描述】:

好吧,给定以下模型:-

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 ...等。

【问题讨论】:

    标签: c# .net asp.net-mvc displayfor


    【解决方案1】:

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

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

    编辑 至于你的第一个问题 - 我不认为 DisplayForModel 是你要找的,你需要的是 DisplayFor

    【讨论】:

    • DisplayFor<T> 总是接受一个表达式。我不明白这对我有什么帮助?其次,我真的不想为每个模型属性手动设置 Html。我虽然有一些默认的方式? IE。 MVC 视图引擎 -=> 请自动显示您知道的每个属性。
    • 你可以这样做@Html.DisplayFor(m=>m.Animal).. 你试过这个吗?是的,只有当你想自定义 html 输出时,提供你自己的模板才是好的..
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      • 2017-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多