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

时间:2015-12-23 07:52:22

标签: c# asp.net asp.net-mvc-3

我有一个ASP.NET MVC3网页,它很好地很好地显示了一个C#的HTML字符串。我的服务器代码以编程方式为带有HTML标记的字符串加载一个漂亮的表。以下cshtml多年来一直将这张漂亮的桌子展示为一张漂亮的桌子:

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

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

  

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

而不是直观地将它呈现为一个表,就像它迄今为止所做的那样。 “Nice Table”标题仍然可以正常显示。

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

尝试在Firefox或IE中使用“查看源代码”似乎无法使用,因为视图部分甚至没有出现在那里。

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

自上次工作以来,我还没有真正触及此页面。我唯一怀疑改变的是应用了一些MS更新,这些更新对我的项目产生了一些其他恼人的副作用。

如何才能重新渲染此文本,而不是将字符串中的HTML标记作为文本显示?

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

您可以使用Html.Raw

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