Моя цель - определить класс для элемента на дочерней странице. На моей главной странице у меня есть следующее:
<body class="<myown:AttributePlaceHolder runat="server" ID="BodyCssClass"/>">
AttributePlaceHolder
происходит от ContentPlaceHolder
и просто удаляет все разрывы строк и лишние пробелы из своего содержимого. Проблема, которую я опишу, также возникает при замене 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, в таком случае мы должны называть это ошибкой или «функцией»?