停止asp:PlaceHolder删除空格

时间:2011-11-09 10:32:16

标签: 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>

输出为aabb cc dd

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

3 个答案:

答案 0 :(得分:7)

最优雅的解决方案是简单地覆盖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
    {
    }
}

此处的关键是使用ControlBuilder代替PlaceHolderControlBuilder,而false只会覆盖它以始终为AllowWhiteSpaceLiterals返回<%@ Register TagPrefix="asp" Namespace="CustomControls" %> <asp:Holder runat="server">...</asp:Holder>

您可以将其用作任何其他网络控件:

{{1}}

答案 1 :(得分:6)

我想出了两个解决方案:

首先:将asp:PlaceHolder替换为asp:Panel。缺点是你得到了一个包裹div

第二:literals

之间添加空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评论。

答案 2 :(得分:0)

我要么用a包围它,要么使用asp:标签而不是文字。您可以更好地控制它的使用方式。使用跨度 - 给它一个类或一个id,你可以定位它,使它看起来像你喜欢。

或者滚动你自己的文字。这不会那么难,但你可能会错过其中的一些其他东西。

第三种方法是创建一个临时字符串,您可以将其绑定到/用作文本的输入。这将具有确保格式的aa bb。