2016-02-12 58 views
0

如何根据模型的属性值在视图中添加自定义HTML?基于模型属性值在视图中呈现html片段

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

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

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

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

回答

0

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

但是,部分可能是你最好的选择。您可以将每个MyType值的HTML位用相同的名称分成部分。然后,你可以叫:

@Html.Partial(Model.MyType) 

换句话说,您可以直接通过类型作为部分的名称使用。请注意,这些值始终与项目中存在的部分相对应,否则您将开始出现异常。如果有人决定为MyType添加另一个值,并且忽略添加关联的部分,则您的应用会出现繁荣。你可以加一点安全,通过检查与已知的谐音价值,只有呈现部分,如果它是其中的一个:

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

那么,至少,最坏的情况是没有东西呈现。