0

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

我的挑战:在 Razor 视图中的实际属性值之前写出 HTML 注释。

这是我的(简化的)视图模型:

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 => m.Title)

但是由于可能我的所有属性都需要这个 HTML 注释,所以我想避免使用 HTML 帮助程序,因为它会使视图变得混乱并且不会使视图看起来更好并且(更多)可读。

这是我尝试过的:

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

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

我的问题:是否有另一种方法来完成我想要的。如前所述:我想避免使用 HTML 助手来写出我的所有属性。(想想循环等。这不是很好)。

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

  1. 它不是实际价值的一部分。是一种元数据。
  2. HTML 注释应添加到int's、double's 和DateTime's。无法调整 double 属性以包含字符串。(图片 a List<DateTime>。所有日期都需要此 HTML 注释)
  3. 应根据 web.config 设置添加 HTML 注释。是或否。(每个属性值的实际 HTML 注释都不同)

我意识到这个问题相当长。对此感到抱歉。任何想法表示赞赏。

4

1 回答 1

1

您可以使用现有的@Html.Raw(Model.Title)

或者,您可以使用显示模板。将 UIHintAttribute 添加到您希望以这种方式运行的属性。

public class MyModel 
{
    [UIHint("Raw")]
    public string MyString { get; set; }
}

创建一个名为的新显示模板Raw.cshtml,该模板接受字符串类型的模型:

@model string
@Html.Raw(model)

然后在您看来,您可以使用:

@Html.DisplayFor(m => m.MyString)

这仍然需要您使用助手 ( DisplayFor)。这是一种推荐的做法,它允许您以最少的代码更改轻松更改一个或多个字段的行为。

于 2013-01-19T13:41:40.447 回答