我遇到了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 "
)?
答案 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
<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。