2011-01-20 10 views
2

私はASP.NET MVC2とC#を使用していますが、この質問は一般的にASP.NETに当てはまります。ASP.NETでHTML属性内にContentPlaceholderを使用できないのはなぜですか?

これは壊れる:

<body id="<asp:ContentPlaceHolder ID="BodyID' runat="server" />"> 

インテリセンスがすぐid=bodyタグと開口部の引用を強調し、文句を言う:

検証(HTML 4.01):要素 '体' 'が不足しています> '文字を開始タグから削除します。

asp要素は無視され、id属性はレンダリングされたHTMLでは空です。 (私は、VS後者の休憩構文hilightingカントー、ASP要素内の二重引用符または一重引用符を使用するかどうか、同じ問題)

これは、(私はセッション変数を設定すると仮定した場合)に動作します:

<body id="<%: Session["BodyID"] %>"> 

なぜそれがありますインライン評価はHTML属性内でサポートされますが、ASPコントロールは属性内でレンダリングされません。

これは私の使用例です。コントローラから渡されたデータに基づいて、ビューはレンダリングしているデータの種類を知っています。このビューは、マスターページのさまざまな場所にデータを注入します。私は頭の中にタイトルをつけて、身体にマークアップすることができますが、私はいくつかの属性にデータを注入したいと思っています。 IDとクラス名は明白な例ですが、他にもあります。

有効なマークアップを維持したまま、これを実行したいと思います。 bodyタグ全体を動的にレンダリングするような仕掛けはありません。Visual Studioで常に有効なHTMLやXMLのようなページが必要です。

インライン評価を使用することはOKですが、モデルやコントローラで行うプロパティを設定する必要があります。いくつかのケースでは必要ですが、他のものでは値は静的です。私は目的に合わせて作成されたビューを持っており、ビューの静的な値をマスターページに注入するだけです。抽象的なコントローラクラスを作成し、すべてのコントローラを継承させるなど、すべてのオーバーヘッドをかけずに、マークアップを注入しているときと同じ機能を取得するだけです。

質問:はい、私は別の質問をする必要があります:ASPコントロールとインラインコードナゲットの評価の順序は何ですか?私はコードナゲットがASPコントロールの前に最初に解決されたと仮定します。 ASPコントロール宣言の中にコードナゲットを入れてください。しかし、私はプロセスを詳述する文書を見つけることができません - 誰も私にそれらを指摘することができますか?

ありがとうございます!

UPDATE:パウリは、彼らがすでにrunat="server"をマークしています要素内じゃないとあなたは確かにいる限り、どこでも好きな場所ContentPlaceholdersを使用できることを述べました。私は再びテストし、彼が正しいことを見て - 私はそれを最初に逃した。 Visual Studioはまだ混乱しており、HTMLの検証警告が表示されますが、ページがレンダリングされるときに期待値が属性に表示されます。だから、その質問への答えは "でも、できます!「

+0

プレースホルダは、属性値が – Guillaume86

+0

の場合は過剰表示のようです。 :) –

+0

マスターページにデータを送信するために見られる他のテクニックと同じように、あまりにも多くの残虐行為はありません!例えば、 http://stackoverflow.com/questions/78548/passing-data-to-master-page-in-asp-net-mvc - ビューからマスターにIDを取得する*ことをしたいと思う? ;-) – Val

答えて

2
  1. 『パーサはすべてのあなたの競合を混同されているので、あなたのIDとラナの周りにあなたはMVCで
  2. 使用』をWebフォームコントロールを使用するべきではありません」「bodyタグ以来の

サーバーコントロールとして扱われないrunat = "server"はありませんが、テキストをクリアするだけで、どこでも自由にコンテンツ所有者を置くことができます。

+1

ContentPlaceHoldersはMVC内で完璧です。 MVCに付属のサンプルプロジェクトにあります。 –

+0

私はあなたが... とそれ以外のものを使っても問題ないはずだと言っていましたが、MVCのコンテンツをレンダリングするときにHtmlHelpersを使うことをお勧めします。 –

+0

はい、HTMLHelperはここで私を助けません - それはデータを必要とするマスターページですが、ヘルパーはビュー上にあります。コンテンツをどのように生成するかに関わらず、masdterページには、ContentPlaceholder、または関数やプロパティを呼び出すインライン評価のいずれかのうちの1つのみを挿入できます。 – Val

関連する問題