2009-06-11 3 views
1

私の目標は、子ページの要素のクラスを定義できるようにすることです。私のマスターページに、私は以下の持っている:このContentPlaceHolderの動作を理解できるはずですか?

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

AttributePlaceHolderContentPlaceHolderから派生して、ちょうどその内容から任意の改行と余分な空白を除去します。私が説明する問題は、を通常の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"> 


po Johanによって次のように動作します。

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

二重引用符を単一のものに変更します。

しかし、私のHTMLよりも一重引用符で表示されます。私を狂っていると呼びますが、それはちょうど私を傷つけます...

私はそれがバグまたは "機能"と呼ぶべきである場合、ASP.NET解析エンジンと関係があると思いますか?

+0

一重引用符の位置は変更できませんでしたか? –

+0

本当にうまくいくはずです。それはあなたが "dohhh"に行くそれらの1つです。 とにかくまだその動作を説明していません。 – Gidon

+0

いいえ、すぐにそれは本当に意味をなさないが、あなたがそれについて考えるならば、別の二重引用符のペアの中に二重引用符があったときに、引用符をつけるためにそれらをエスケープしたり変更したりすることなく動作しましたか?ですから、それは意味がありますが、別のやり方ではありません。 –

答えて

1

また、出力を二重引用符で囲むこともできます引用符の設定を逆にすることによって、サーバーのタグを歌う:

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

プレースホルダのラナとID属性は、単一引用符で囲まれています。なぜサーバータグが元のコードを動作させるのかについては、解析エンジン内の悪魔だけがそのことを知っています...

1

はこのような何かを試してみてください。

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

私は私の更新にあなたの答えを加えました。 – Gidon

0

あなたがこのことについて考えたことはありますか?あなたのaspxページで

は、サーバーオブジェクト

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

ようにbodyタグを設定した後、あなたの後ろにあなたのコード内であなたが

次のマークアップ

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

を好きな属性を設定することができます

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

私はテキストにそれを述べなかったが、私はそれをMVCとしてタグ付けした。だから私はコードがありませんし、コントローラ内のクラス名を設定したくないです。クラス名はビューに設定する必要があります。 – Gidon

関連する問題