Должен ли я быть в состоянии понять это поведение ContentPlaceHolder? - PullRequest
1 голос
/ 11 июня 2009

Моя цель - определить класс для элемента на дочерней странице. На моей главной странице у меня есть следующее:

<body class="<myown:AttributePlaceHolder runat="server" ID="BodyCssClass"/>">

* * * * * * * * * * * * * * * * * * * * * * * * * * AttributePlaceHolder * * * * * * * * * * * * * * *1004* и просто удаляет любые разрывы строк и лишние пробелы из его содержимого Проблема, которую я опишу, также возникает при замене AttributePlaceHolder на обычный ContentPlaceHolder.

Теперь указанный выше фрагмент кода не работает и приводит к следующей ошибке:

Не удается найти ContentPlaceHolder BodyCssClass на главной странице '/Views/Shared/Site.Master', проверьте ContentPlaceHolderID элемента управления контентом атрибут на странице содержимого

При изменении вышеуказанной строки кода на:

<body class="<% %><myown:AttributePlaceHolder runat="server" ID="BodyCssClass"/>">

Работает (обратите внимание на добавленный <% %>).

Это делает трюк, просто интересно, если я что-то здесь упускаю.

Только для дополнительной информации, на моих дочерних страницах я могу написать:

<asp:Content ContentPlaceHolderID="BodyCssClass" runat="server">profile-edit someotherclass another-class</asp:Content>

или даже:

    <asp:Content ContentPlaceHolderID="BodyCssClass" runat="server">profile-edit
someotherclass

another-class
</asp:Content>

и он будет хорошо распечатан как:

<body class="profile-edit someotherclass another-class">

Редактировать
Как отметил Йохан, также работает следующее:

<body class='<myown:AttributePlaceHolder runat="server" ID="BodyCssClass"/>'>

Изменяет двойные кавычки на одинарные.

Но, кроме того, мой html также будет отображаться в одинарных кавычках. Называй меня сумасшедшим, но это только ранит меня ...

Полагаю, это связано с механизмом синтаксического анализа ASP.NET, в этом случае мы должны назвать это ошибкой или "функцией"?

Ответы [ 3 ]

1 голос
/ 20 октября 2009

Вы также можете получить двойные кавычки в выводе, не используя серверные теги, изменив настройку кавычек:

<body class="<myown:AttributePlaceHolder runat='server' ID='BodyCssClass'/>">

Атрибуты runat и ID заполнителя заключаются в одинарные кавычки. Относительно того, почему тег сервера делает исходный код работоспособным, только демоны внутри механизма синтаксического анализа знают, что ...

1 голос
/ 11 июня 2009

попробуйте что-то вроде этого:

<body class='<asp:ContentPlaceHolder id="PlaceHolderTitleAreaClass" runat="server">ms-areaseparator</asp:ContentPlaceHolder>' ... >
0 голосов
/ 11 июня 2009

Вы думали об этом?

На вашей странице aspx установите тег body в качестве объекта сервера

<body runat="server" id="HtmlBody">

Тогда в вашем коде вы можете установить любые атрибуты, которые вам нравятся

HtmlBody.Attributes.Add("class", "your-css-class-name");

, которая производит следующую разметку

<body id="ctl00_HtmlBody" class="your-css-class-name">
...