在绑定标签中显示SQL的换行符



我有问题显示新的行字符从SQL数据库拉到DataList或类似的控制。当我插入它们时,我保留了这些字符,并且快速的SELECT语句显示了换行符。但是,当我将数据拉入数据列表时,它显示的是空格而不是新行。当前代码如下所示:

<asp:Label ID="CommentLabel" runat="server" Text='<%# Eval("Comment").ToString().Replace(Environment.NewLine, "<br />") %>' />

我也看到了使用Server.HTMLEncode的建议,我想,但是没有一个在这种情况下使用它的例子,我的尝试没有产生明显的差异,如:

<asp:Label ID="CommentLabel" runat="server" Text='<%# Server.HTMLEncode(Eval("Comment").ToString()).Replace(Environment.NewLine, "<br />") %>' />

我是不是漏掉了什么?

编辑:在多行文本框中通过回车键创建新行。我不确定这是否与Environment.Newline中包含的字符不同,但生成的HTML显示<span>标签,里面有适当的换行符,但没有<br />标签,所以我猜它是不同的。如果是的话,要替换的合适字符是什么?

EDIT2:项目模板的代码

<ItemTemplate>
    <tr style="font-weight:bold">
        <td>
            Comment ID: <asp:Label ID="CommentIDLabel" runat="server" Text='<%# Eval("CommentID") %>' />
            Commenter: <asp:Label ID="CommenterLabel" runat="server" Text='<%# Eval("Username") %>' />
            Comment Date: <asp:Label ID="DateLabel" runat="server" Text='<%# Eval("Date") %>' />
        </td>
    </tr>
    <tr>
        <td>
            <asp:Label ID="CommentLabel" runat="server" Text='<%# (Eval("Comment")).Replace(Environment.NewLine, "<br />") %>' />
        </td>
    </tr>
</ItemTemplate>

正如Augustin Meriles在他的评论中所说,问题在于在多行文本框中按enter键不使用Environment.NewLine中包含的新行字符。一些调查显示,它是在vbCrvbLf中编写的,而不是使用vbCrLf。知道了这一点,改变我的替换方法就解决了这个问题。

<asp:Label ID="CommentLabel" runat="server" Text='<%# (Eval("Comment")).Replace(vbCr, "").Replace(vbLf, vbCrLf).Replace(Environment.NewLine, "<br />") %>' />

这在整个视图中实现了可识别的统一换行。

查看您的页面生成的html代码,您将看到如下内容:

<table id="GridView1">
<tr>
<td>
hello<br/>hello
</td>
</tr>
</table>

但是如果你将gridviews(或其他控件)列类型转换为模板字段,你会看到这样的内容:

<table id="GridView1">
<tr>
<td>
 <span id="GridView1_Label1_0">hello <br/>hello</span>
</td>
</tr>
</table>

现在里面有换行了!总之,您只需要将列转换为模板字段。

最新更新