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
.
有没有办法阻止它删除空格(而不是通过
在文字之间添加Text="aa "
)?
最优雅的解决方案是简单地覆盖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
,这只是覆盖它总是返回false
了AllowWhiteSpaceLiterals
.
您将其用作任何其他Web控件:
<%@ Register TagPrefix="asp" Namespace="CustomControls" %>
<asp:Holder runat="server">...</asp:Holder>
Run Code Online (Sandbox Code Playgroud)
我想出了两个解决方案:
第一:要更换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评论.