我正在努力解决以下问题,我找不到一种可以接受的解决方法。
我的挑战:在Razor视图中的实际属性值之前写出HTML注释。
这是我的(简称)Viewmodel:
public class Article
{
public string Title {get;set;}
}
要写出这个标题,我只需在Razor视图中执行此操作:
<h2>@Model.Title</h2>
现在我想在实际标题之前写出一个html注释,这样生成的HTML就像这样(简单):
<h2><!-- some parameters for a 3th party system --> This is my title</h2>
HTML评论来自我应用于“标题”属性的属性。它的值是生成的,因此使用.NET框架中的TypeDescriptor在运行时添加属性值。
现在我知道我可以通过使用HTML帮助程序写出所有属性来实现这一点。像这样:@ MyHelper.Write(m =&gt; m.Title)
但是因为我的所有属性都可能需要这个HTML注释,所以我希望避免使用HTML帮助器,因为它会使View混乱,并且不会使视图看起来很好并且(更多)可读。
这就是我的尝试:
WebViewPage<TModel>
)。并覆盖它的'写'方法。 这种作品,但这里最大的问题是我不知道当时写出了哪个属性。无法在“Write”方法中获取当前属性名称。所以现在我动态搜索我的模型以找到一个具有已写出的值的属性,并从属性中添加HTML注释。
我的问题:是否有另一种方法可以实现我想要的目标。作为sais之前:我想避免使用HTML帮助程序写出我的所有属性。 (想想循环等等。这不太好。)
此外,在我的控制器中添加此HTML注释是没有选择的,因为:
int
,双和DateTime
。无法调整double属性以包含字符串。 (图片List<DateTime>
。所有日期都需要此HTML评论)我意识到这个问题相当漫长。对不起。任何想法都表示赞赏。
答案 0 :(得分:1)
您可以使用现有的@Html.Raw(Model.Title)
或者,您可以使用显示模板。将UIHintAttribute添加到您希望以这种方式运行的属性。
public class MyModel
{
[UIHint("Raw")]
public string MyString { get; set; }
}
创建一个名为Raw.cshtml
的新显示模板,该模板接受string类型的模型:
@model string
@Html.Raw(model)
然后在您的视图中,您可以使用:
@Html.DisplayFor(m => m.MyString)
这仍然需要您使用帮助器(DisplayFor
)。这是一种推荐的做法,它允许您轻松更改一个或多个字段的行为,而且代码更改最少。