基于模型属性值在视图中呈现html片段
问题描述:
如何根据模型的属性值在视图中添加自定义HTML?基于模型属性值在视图中呈现html片段
例如,我的模型具有可以具有值“ABC”,“DEF”或“GHI”的字符串属性“MyType”。
然后,在视图中,我想输出大量的HTML,特定于与模型一起传递的个人“MyType”。
我知道在视图中,我可以有一个辅助函数,它看起来在Model.MyType,并有一个switch语句来显示一些HTML,但有没有更好的方法来做到这一点,从HTML中抽象出HTML视图?
即使我可以创建一个辅助函数,该函数会有一个开关,但是随后调用cshtml文件来获取适当的HTML。我想有点像DisplayTemplates如何工作,但我不能真正使用这些,因为这意味着它将被称为每个STRING,而不是我的模型特定的属性...
答
那么,首先你可以使用只要您使用[UIHint("Foo")]
注释修饰您的财产,就可以显示模板。 “Foo”部分对应于特定的显示模板,因此您可以针对不同类型的字符串使用不同的显示模板。
但是,部分可能是你最好的选择。您可以将每个MyType
值的HTML位用相同的名称分成部分。然后,你可以叫:
@Html.Partial(Model.MyType)
换句话说,您可以直接通过类型作为部分的名称使用。请注意,这些值始终与项目中存在的部分相对应,否则您将开始出现异常。如果有人决定为MyType
添加另一个值,并且忽略添加关联的部分,则您的应用会出现繁荣。你可以加一点安全,通过检查与已知的谐音价值,只有呈现部分,如果它是其中的一个:
@if (new[] { "ABC", "DEF", "GHI" }.Contains(Model.MyType))
{
@Html.Partial(Model.MyType)
}
那么,至少,最坏的情况是没有东西呈现。