Stop asp: PlaceHolder от удаления пробелов - PullRequest
12 голосов
/ 09 ноября 2011

Я столкнулся со странным поведением asp:PlaceHolder, оно удаляет пробелы между asp:Literal s внутри него.

Например, для этого кода:

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

7 голосов
/ 23 марта 2012

Самое элегантное решение - просто переопределить 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>
6 голосов
/ 09 ноября 2011

Я придумал два решения:

Первый: Заменить 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>

И да, <!> - это официальный HTML-комментарий.

0 голосов
/ 09 ноября 2011

Я бы окружил его символом asp: вместо литерала.У вас будет намного больше контроля над тем, как он будет использоваться.С помощью span - дайте ему класс или идентификатор, и вы можете настроить его так, чтобы он выглядел так, как вам нравится.

В качестве альтернативы выведите свой собственный литерал.Это будет не так сложно, но вы можете пропустить некоторые другие вещи, которые идут с ним.

Третий вариант - создать временную строку, которую вы можете связать / использовать в качестве ввода в литерал.Это будет иметь BB в гарантированном формате.

...