在剃刀中写下额外的HTML注释

时间:2013-01-19 13:37:33

标签: c# asp.net html asp.net-mvc razor

我正在努力解决以下问题,我找不到一种可以接受的解决方法。

我的挑战:在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混乱,并且不会使视图看起来很好并且(更多)可读。

这就是我的尝试:

  • 创建了一个自定义Razor基页(继承自WebViewPage<TModel>)。并覆盖它的'写'方法。

这种作品,但这里最大的问题是我不知道当时写出了哪个属性。无法在“Write”方法中获取当前属性名称。所以现在我动态搜索我的模型以找到一个具有已写出的值的属性,并从属性中添加HTML注释。

我的问题:是否有另一种方法可以实现我想要的目标。作为sais之前:我想避免使用HTML帮助程序写出我的所有属性。 (想想循环等等。这不太好。)

此外,在我的控制器中添加此HTML注释是没有选择的,因为:

  1. 它不是实际价值的一部分。是一种元数据。
  2. HTML评论应添加到int,双和DateTime。无法调整double属性以包含字符串。 (图片List<DateTime>。所有日期都需要此HTML评论)
  3. 应根据web.config设置添加HTML注释。是或否(实际HTML注释对于属性的每个值都不同)
  4. 我意识到这个问题相当漫长。对不起。任何想法都表示赞赏。

1 个答案:

答案 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)。这是一种推荐的做法,它允许您轻松更改一个或多个字段的行为,而且代码更改最少。