ビューからレイアウトに追加することについて話しているのですか?ビューはレイアウトの前にレンダリングされるため、スタイルブロックのレンダリングを処理するヘルパーを作成すると、問題が解決します。
つまり、ビューまたはビューコンポーネントで、次のようなものを呼び出すことができます。
$Style.Add("/static/style1.css")
レイアウト(ヘッドセクション):
$Style.Render()
ヘルパーの例を次に示します(AbstractHelperの継承はオプションです)。
public class StyleHelper : AbstractHelper
{
private readonly HashedSet<string> sheets = new HashedSet<string>();
public void Add( string styleSheet )
{
Add( styleSheet, "all" );
}
public void Add( string styleSheet, string media )
{
this.sheets.Add( String.Format( "media=\"{0}\" href=\"{1}\"", media, styleSheet ) );
}
public string Render()
{
var str = new StringBuilder();
this.sheets.ToList().ForEach( sheet => str.AppendLine( String.Format( "<link rel=\"stylesheet\" {0} />", sheet ) ) );
return str.ToString();
}
}
AbstractHelperは、Castle.Monorail.Framework.Helpersの一部です。その抽象的な実装によって公開された機能を利用したい場合を除いて、それを継承する必要はありません。次に、それをベースコントローラーまたは特定のコントローラーのいずれかのコントローラーに追加します。
[Helper( typeof( StyleHelper ), "Style" )]
public class YourController