为什么 Html.DisplayTextFor 停止将文本显示为 HTML?

Why has Html.DisplayTextFor stopped showing the text as HTML?

我有一个 ASP.NET MVC3 网页,它曾经很好地显示 HTML 的 C# 字符串。我的服务器代码以编程方式加载带有 HTML 标签的字符串以获得漂亮的 table。多年来,以下 cshtml 一直将这个 nice table 显示为一个 nice table:

<h3>Nice Table:</h3>
@Html.DisplayTextFor( model => model.sNiceTable )

但是今天我们注意到浏览器(Firefox 和 IE)将其显示为一堆显示 HTML 标签文本的文本:

<table><tr><th>...

而不是像 table 那样在视觉上呈现它,多年来一直如此。 "Nice Table" header 仍然正常显示。

查看 Firefox 开发人员检查器中的文本显示 HTML 看起来应该呈现为 HTML,但是(在显示 <h3> 标签后)它也有那些我的字符串中的标记为黑色,即使当我将相同的字符串粘贴到 HTML 文件并加载它时,它也显示了漂亮的 table。也就是说,Inspector 显示的代码就好像它应该可以工作一样,但由于某种原因我的字符串是黑色的,在它的代码视图中没有显示。

尝试在 Firefox 或 IE 中使用 "view source" 似乎无法使用,因为视图部分由于某种原因甚至没有显示。

我看到还有其他各种方法,例如 Display() 和 DisplayFor(),但它们似乎做同样的事情。

自从它上次运行以来,我还没有真正接触过它。我唯一怀疑改变的是应用了一些 MS 更新,这些更新在我的项目中有一些其他令人讨厌的 side-effects。

我该怎么做才能让此文本再次呈现,而不是将字符串中的 HTML 标记作为文本喷出?

编辑:model.sNiceTable是viewmodel的C#字符串数据成员,其中接口为:

public interface IMemberStatsViewModel
{
    string sNiceTable { get; set; }
    // other properties...
}

它的值在我的代码中组装,在视图模型的构造函数中调用:

public MemberStatsViewModel()
    : base(new DataLayer.DataLayer(), ClientInterfaceTypeEnum.Web)
{
    InitializeMe();
}

InitializeMe() 调用一个数据层函数,该函数 returns C# 字符串并将其分配给 sNiceTable。该字符串是根据我在数据层中查找的内容构建的。

您可以使用Html.Raw

   <h3>Nice Table:</h3>
   @Html.Raw(model.sNiceTable)