如何在不关闭HTML编码的情况下正确显示asp GridView BoundField中的换行符

Gok*_*oku 5 html asp.net frontend gridview web

我需要在asp GridView中的asp BoundField的内容中显示换行符。我最初有\ r \ n,但是页面完全忽略了此换行符。我做的第二件事是在字符串中替换换行符,但是无论我在字符串中的何处,页面仅显示文字文本“”。我尝试过的最后一件事在技术上是行得通的,并且通过将字段的字符串放入HTML编码并将元素设置为“ false”,从而实现了这一目标。该解决方案的问题在于,我听说这会引起安全问题。如何在这些字段中使用换行符而不将HTML编码设置为false。

Rob*_*Rob 5

默认情况下,HTML将换行符,制表符和空格视为普通的空格,并将多个空格字符折叠到一个空格中以进行渲染。因此,在HTML中包含换行符通常不会影响在浏览器中呈现文本的方式。有关此主题的更多信息和背景,请参考上一个问题,该问题具有非常有益的评论。

但是,如果希望文本中的换行符在浏览器中显示为换行符,则可以在纯CSS中实现此功能,而无需关闭HTML编码或引入任何安全性问题。在白色空间CSS属性为标准,已通过了很久所有主流浏览器的支持,使您可以指示浏览器渲染换行符原样。

GridView可以通过使用<ItemStyle>标记将ASP.Net生成的HTML更改为包括CSS样式,如下所示:

<style>
    .preformatted 
    {
        white-space: pre-line;
    }
</style>

<asp:GridView runat="server" ...>
    <Columns>
        <asp:BoundField ...>
            <ItemStyle CssClass="preformatted"/>
        </asp:BoundField>
    </Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

white-space: pre-line;您也可以尝试使用white-space: pre;,而不是使用,但是这剥夺了浏览器使文本流动以适合可用空间的能力,因此,如果文本没有足够的换行符,则可能导致网格列变得太宽。