2

我在显示从 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 />") %>' />

我在这里错过了一些难题吗?

编辑:在多行文本框中通过 Enter 创建新行。我不确定这是否会产生与包含的字符不同的字符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>
4

2 回答 2

2

正如 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 />") %>' />

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

于 2013-03-05T19:56:05.277 回答
0

观察你的页面生成的 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>

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

于 2013-03-05T16:09:56.167 回答