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

本文关键字:Html 文本 显示 DisplayTextFor 为什么 | 更新日期: 2023-09-27 18:27:47

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

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

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

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

而不是像多年前那样将其可视化为一张表。"漂亮的桌子"标题仍然正确显示。

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

在Firefox或IE中尝试使用"视图源代码"似乎是不可用的,因为视图部分由于某种原因甚至没有出现在那里。

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

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

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

Edit: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。这个字符串是基于我在数据层中查找的内容构建的。

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

您可以使用Html.Raw

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