2009-06-11 4 views
1

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

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

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

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

Cannot find ContentPlaceHolder 'BodyCssClass' in the master page '/Views/Shared/Site.Master', verify content control's ContentPlaceHolderID attribute in the content page

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

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

Редактировать
As po заключенный Йоханом также работает:

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

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

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

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

+0

Не могли бы вы просто изменить, где находятся одиночные кавычки? –

+0

Это действительно должно работать. Это одна из тех вещей, которые вы делаете «доххх». В любом случае все еще не объясняет поведение. – Gidon

+0

Нет, сразу это не имеет никакого смысла, но если вы думаете об этом; когда есть двойные кавычки внутри другой пары двойных кавычек, когда-либо работавших, не ускользая или не меняя их на котировки? Таким образом, это имеет смысл, но по-другому это не так. –

ответ

1

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

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

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

1

попробовать что-то вроде этого:

<body class='<asp:ContentPlaceHolder id="PlaceHolderTitleAreaClass" runat="server">ms-areaseparator</asp:ContentPlaceHolder>' ... > 
+0

Я добавил ваш ответ в мое обновление. – Gidon

0

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

В вашей странице ASPX поставил метку тела, чтобы быть объектом сервера

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

Затем в коде позади вы можете задать любые атрибуты, которые вы любите

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

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

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

Хотя я не указал его в тексте, я сделал его как MVC. Поэтому у меня нет кода и не хочу устанавливать имя класса в контроллере. Имя класса должно быть указано в представлении. – Gidon

Смежные вопросы