私は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の検証警告が表示されますが、ページがレンダリングされるときに期待値が属性に表示されます。だから、その質問への答えは "でも、できます!「
プレースホルダは、属性値が – Guillaume86
の場合は過剰表示のようです。 :) –
マスターページにデータを送信するために見られる他のテクニックと同じように、あまりにも多くの残虐行為はありません!例えば、 http://stackoverflow.com/questions/78548/passing-data-to-master-page-in-asp-net-mvc - ビューからマスターにIDを取得する*ことをしたいと思う? ;-) – Val