基于模型属性值在视图中呈现html代码段

时间:2016-02-12 17:11:59

标签: asp.net-mvc

如何根据模型的属性值在视图中添加自定义HTML?

例如,我的模型有一个字符串属性“MyType”,其值可以是“ABC”,“DEF”或“GHI”。

然后,在视图中,我想输出大量HTML,特定于随模型传递的单个“MyType”。

我知道在视图中我可以有一个辅助函数,它看一下Model.MyType并有一个switch语句来显示一些HTML,但有更优雅的方法来实现这一点,从视图中抽象出HTML ?

即使我可以创建一个具有开关的辅助函数,但是然后调用cshtml文件来获取适当的HTML。我认为有点像DisplayTemplates如何工作,但我不能真正使用它们,因为这意味着它将被调用每个STRING,而不是我的特定于模型的属性......

1 个答案:

答案 0 :(得分:0)

嗯,首先,只要使用[UIHint("Foo")]注释装饰属性,就可以使用显示模板。 “Foo”部分对应于特定的显示模板,因此您可以对不同类型的字符串使用不同的显示模板。

但是,偏见可能是你最好的选择。您可以将每个MyType值的HTML位置放在一个相同名称的部分中。然后你可以打电话:

@Html.Partial(Model.MyType)

换句话说,您直接传递类型作为要使用的部分的名称。请注意,值始终对应于项目中存在的部分,否则您将开始获得异常。如果有人决定为MyType添加另一个值,并忽略添加相关的部分,那么您的应用就会热潮。您可以通过检查已知部分的值来添加一些安全性,并且只渲染部分,如果它是其中之一:

@if (new[] { "ABC", "DEF", "GHI" }.Contains(Model.MyType))
{
    @Html.Partial(Model.MyType)
}

然后,至少,最糟糕的情况是没有任何东西被渲染。