1

私の目標は、子ページの要素のクラスを定義できるようにすることです。私のマスターページには次のものがあります。

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

AttributePlaceHolderから派生しContentPlaceHolder、その内容から改行と余分なスペースを取り除きます。AttributePlaceHolder説明する問題は、 を通常の に変更するときにも発生しますContentPlaceHolder

上記のコードは機能せず、次のエラーが発生します。

マスター ページ '/Views/Shared/Site.Master' に ContentPlaceHolder 'BodyCssClass' が見つかりません。コンテンツ ページでコンテンツ コントロールの 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 解析エンジンに関係していると思いますが、その場合、バグまたは「機能」と呼ぶべきでしょうか?

4

3 に答える 3

1

このようなことを試してください:

<body class='<asp:ContentPlaceHolder id="PlaceHolderTitleAreaClass" runat="server">ms-areaseparator</asp:ContentPlaceHolder>' ... >
于 2009-06-11T08:42:38.607 に答える
1

引用符の設定を逆にすることで、サーバータグを使用せずに出力で二重引用符を実現することもできます。

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

プレースホルダーの runat および ID 属性は一重引用符で囲みます。サーバータグが元のコードを機能させる理由については、解析エンジン内の悪魔だけがそれを知っています...

于 2009-10-20T17:01:31.557 に答える
0

これについて考えたことはありますか?

あなたのaspxページでbodyタグをサーバーオブジェクトに設定しました

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

次に、コードビハインドで、好きな属性を設定できます

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

次のマークアップを生成します

<body id="ctl00_HtmlBody" class="your-css-class-name">
于 2009-06-11T13:03:39.690 に答える