Asp.net 停止asp:占位符删除空白

Asp.net 停止asp:占位符删除空白,asp.net,whitespace,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="s

我遇到了
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>

输出将是
aabb cc dd


有没有办法阻止它删除空白(而不是在文字之间添加
Text=“aa”
)?

我会用一个或asp:标签而不是文字来包围它。您将对如何使用它有更多的控制权。使用span-给它一个类或id,您可以将其作为目标,使其看起来像您喜欢的那样

或者滚动你自己的文字。这不会很难,但你可能会错过它附带的一些其他东西


第三种选择是创建一个临时字符串,您可以将其绑定/用作文本的输入。这将确保aa bb的格式。我想出了两个解决方案:

首先:
asp:Panel
替换
asp:PlaceHolder
。缺点是您会得到一个包装
div

Second:
文本之间放置空HTML注释

<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>


是的,
是一个合法的HTML注释。

最优雅的解决方案是简单地覆盖
占位符

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
    {
    }
}

你为什么要这个?对你和世界上的其他人来说,重构要困难得多future@Kim我想要它,因为它应该是这样工作的。如果文字是名字和姓氏,我想在它们之间留一个空格…刚刚碰到这个,差点把我的头发拔出来。我无法在一个干净的新网站上复制,所以我开始拿出标签,直到我确定占位符是罪魁祸首。在那之后,很容易找到这篇文章。我仍然不明白为什么它会这样设计,假设它不是一个bug。“感谢您的报告,这实际上是有意的。占位符通常不是这样的标记中的用户,它本质上是页面中的一个‘标记’。”因此,如果它只是一个标记,为什么要删除空白?我还是不明白…@Nelson Rothermel你可以从@pOcHa的回答中看出这是故意的。查看
PlaceHolderControlBuilder
中的
allowHiteSpaceLiterals
覆盖。仍然不确定它为什么会这样设计……对于
asp:Label
,我们也有同样的问题,无论如何,我不想在HTML中添加额外的元素。要获得真正的解决方案,请查看我的答案
<%@ Register TagPrefix="asp" Namespace="CustomControls" %>
<asp:Holder runat="server">...</asp:Holder>