我有问题显示新的行字符从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
中包含的新行字符。一些调查显示,它是在vbCr
和vbLf
中编写的,而不是使用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>
现在里面有换行了!总之,您只需要将列转换为模板字段。