2009-06-11 7 views
1

Mein Ziel ist es, eine Klasse für das Element in einer untergeordneten Seite definieren zu können. Auf meinem Masterseite habe ich folgendes:Sollte ich dieses ContentPlaceHolder-Verhalten verstehen?

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

Die AttributePlaceHolder von ContentPlaceHolder leitet, und Streifen aus nur alle Zeilenumbrüche und zusätzliche Leerzeichen von seinem Inhalt. Das Problem, das ich beschreiben werde, tritt auch auf, wenn der AttributePlaceHolder in einen normalen ContentPlaceHolder geändert wird.

nun das oben genannte Stück Code funktioniert nicht und wird in dem folgenden Fehler am Ende:

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

Wenn die obige Codezeile in Ändern:

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

Es tut arbeiten (beachten Sie die hinzugefügt <% %>).

Es macht den Trick, nur wundernd, wenn ich hier etwas vermisse.

nur für die zusätzliche Informationen, in meinem Kind Seiten kann ich schreiben:

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

oder sogar:

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

another-class 
</asp:Content> 

und es wird schön ausgedruckt werden als:

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

Bearbeiten
Wie po von Johan funktioniert auch folgendes:

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

Ändert die doppelten Anführungszeichen in einzelne.

Aber als mein HTML würde auch mit einfachen Anführungszeichen angezeigt. Nennt mich verrückt, aber das tut mir weh ...

Ich denke, es hat mit der ASP.NET-Parsing-Engine zu tun, in diesem Fall sollten wir es einen Fehler oder ein "Feature" nennen?

+0

Konnte man nicht einfach die einfachen Anführungszeichen ändern? –

+0

Das sollte in der Tat funktionieren. Das ist eines dieser Dinge, die Sie "Dohhh" gehen. Trotzdem erklärt das Verhalten immer noch nicht. – Gidon

+0

Nein, auf einmal macht es keinen Sinn, aber wenn Sie darüber nachdenken; Wann haben doppelte Anführungszeichen in einem anderen doppelten Anführungszeichen jemals funktioniert, ohne dass sie in einzelne Anführungszeichen umgewandelt wurden? Also in gewisser Weise macht es Sinn, aber auf eine andere Art und Weise ist es nicht .. –

Antwort

1

Sie können auch die doppelten Anführungszeichen in der Ausgabe ohne u erreichen singen die Server-Tags durch die Anführungszeichen Setup Umkehrung:

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

Die Runat und ID-Attribute des Platzhalters zitiert Single sind. Warum der Server-Tag den ursprünglichen Code funktioniert, wissen nur die Dämonen in der Parsing-Engine ...

1

versuchen, etwas wie folgt aus:

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

Ich habe Ihre Antwort in mein Update hinzugefügt. – Gidon

0

Haben Sie darüber nachgedacht?

In Ihrer aspx Seite hat den Body-Tag gesetzt ein Serverobjekt

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

Dann in Ihrem Code sein hinter Sie alle Attribute festlegen können Sie

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

dergleichen, die die folgende Markup erzeugt

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

Obwohl ich es nicht im Text angegeben habe, habe ich es als MVC markiert. Ich habe also keinen Code mehr und möchte den Klassennamen nicht im Controller festlegen. Der Klassenname sollte in der Ansicht festgelegt werden. – Gidon

Verwandte Themen