2012-03-06 5 views
9

私はアプリケーションの管理パネルにChromatronテーマを使用しています。 HTMLコンテンツを持っているサイドバーガジェットがあります。ちょっとしたCSSトリックでは完全に違うように見せることができます。私はこのように使用されている部分図がしたい"for"ブロックのように、MVC-Razorの部分ビューにHTMLコンテンツを渡すにはどうすればいいですか?

<section class="sidebar nested"> 
    <h2>Nested Section</h2> 
    <p>Lorem ipsum dolor sit amet, conse ctetur adipiscing elit. Maec enas id augue ac metu aliquam.</p> 
    <p>Sed pharetra placerat est suscipit sagittis. Phasellus <a href="#">aliquam</a> males uada blandit. Donec adipiscing sem erat.</p> 
</section> 

@Html.Partial("Path/To/Partial/View"){ 
    <h2>Nested Section</h2> 
    <p>Lorem ipsum dolor sit amet, conse ctetur adipiscing elit. Maec enas id augue ac metu aliquam.</p> 
    <p>Sed pharetra placerat est suscipit sagittis. Phasellus <a href="#">aliquam</a> males uada blandit. Donec adipiscing sem erat.</p> 
} 

TBHを、私は@for(...){ }ブロック内に持っているような機能を持っていると思います。 これはRazorで可能ですか?

+1

あなたが望むものかどうかわかりませんが、見てください:http://lostechies.com/hugobonacci/2011/07/11/templates-with-razor/ –

+0

フェリペありがとうございます。しかし、これは私が探しているものではなく、おそらく私はそれを働かせることができません。 'for'ブロックと同じ機能が必要です。私は他の '@ 'かみそりの指示やHTMLコンテンツを挿入することができる最後のブロックを持っています。ちょうど 'for'ブロックのように... – Achilles

+0

私は同じことをしようとしています。私の[*非常に似て*のSOの質問](http://stackoverflow.com/q/21760850/173497)を参照してください。私が見つけたもっとも近いものは、投稿@FelipeOrianiです。 'HtmlHelper'拡張メソッドも機能しますが、ビューや部分ビューとして使用するHTMLを保存することはできませんでした。しかし、実際には、ヘルパー関数の構文の括弧のブロック構文を放棄するだけでした。 –

答えて

15

私は同じジレンマを持っていました。 Funcプロパティでviewmodel型を作成し、htmlをデリゲートとして渡してみてください。

public class ContainerViewModel 
{ 
    public String Caption { get; set; } 
    public String Name { get; set; } 
    public Int32 Width { get; set; } 
    public Func<object, IHtmlString> Content { get; set; } 
} 

@Html.Partial("Container", new ContainerViewModel() 
{ 
    Name = "test", 
    Caption = "Test container", 
    Content = 
    @<text> 
     <h1>Hello World</h1> 
    </text>, 
    Width = 600 
}) 

このように部分的に呼び出すことができます。

@Model.Content(null) 

希望します。

@ ...構文は(あなたがタイプobjectとしてここに宣言し、そして用nullを渡している)モデルを消費あなたのために少しのHtmlHelperを作成し、IHtmlStringを返すので、それが動作します。

@ Html.BeginFormがコンテンツで使用されている場合、BEWAREフォームの値がサーバーに送信されていないようです。

したがって、フォームをコンテナの周りにラップしてください。

+1

私はこの解決策が大好きですが、<ダイナミックな...は本当に汚いと感じました。モデルを取る暗黙的な小さなHtmlHelperを作成していることが分かります。したがって、Funcへの入力引数の型はあなたが好きなもの(必要な場合はオブジェクト)で、戻り値の型は常にIHtmlStringです。これを反映するように編集された答え。完璧に動作します! –

+0

このソリューションは絶対に素晴らしいです!私はHTMLコンテンツを囲んでウィジェット/パーシャルを作成し、このメソッドを使用してコンテンツを内部に挿入することができます。それはきれいで、本当にうまくいっています!ありがとうございました! –

0

そのコンテンツを生成するためのhtmlhelper関数が必要なようです。あなたは、部分的な見方ではなく、ヘルパーとして実装することに目を向けましたか?

+0

私は "インラインヘルパー"を調べましたが、それは仕事です。実際にはコンテンツをプレースホルダに渡すにはいくつかの方法があります。私は上に示したような表記法を使うことができれば、私のHTMLコードはもっときれいに見えるだろうと思います。 – Achilles

関連する問題