停止asp:PlaceHolder删除空格

Ole*_*hko 12 asp.net whitespace

我遇到了一些奇怪的行为asp:PlaceHolder,它删除了asp:Literal它内部的空格.

例如,对于此代码:

<asp:PlaceHolder ID="PlaceHolder1" runat="server">
    <asp:Literal ID="Literal1" Text="aa" runat="server"></asp:Literal>
    <asp:Literal ID="Literal2" Text="bb" runat="server"></asp:Literal>
</asp:PlaceHolder>
<asp:Literal ID="Literal3" Text="cc" runat="server"></asp:Literal>
<asp:Literal ID="Literal4" Text="dd" runat="server"></asp:Literal>
Run Code Online (Sandbox Code Playgroud)

输出将是aabb cc dd.

有没有办法阻止它删除空格(而不是通过&nbsp;在文字之间添加Text="aa ")?

Nik*_*vić 8

最优雅的解决方案是简单地覆盖PlaceHolder:

using System.Web.UI;
using System.Web.UI.WebControls;

namespace CustomControls
{
    [ToolboxData("<{0}:Holder ID='Holder1' runat='server'></{0}:Holder>"), ControlBuilder(typeof(ControlBuilder))]
    public sealed class Holder: PlaceHolder
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

这里的关键是使用ControlBuilder的替代PlaceHolderControlBuilder,这只是覆盖它总是返回falseAllowWhiteSpaceLiterals.

您将其用作任何其他Web控件:

<%@ Register TagPrefix="asp" Namespace="CustomControls" %>
<asp:Holder runat="server">...</asp:Holder>
Run Code Online (Sandbox Code Playgroud)


Ole*_*hko 6

我想出了两个解决方案:

第一:要更换asp:PlaceHolder使用asp:Panel.缺点是你得到了包装div.

第二:在.之间放置一个空的HTML注释literals

<asp:PlaceHolder ID="PlaceHolder1" runat="server">
    <asp:Literal ID="Literal1" Text="aa" runat="server"></asp:Literal><!>
    <asp:Literal ID="Literal2" Text="bb" runat="server"></asp:Literal>
</asp:PlaceHolder>
Run Code Online (Sandbox Code Playgroud)

是的,<!>是一个合法的HTML评论.