2011-09-09 31 views
2

MVC3プロジェクトには複雑なビュー(cshtml)があります。異なる変数によっては、このコードの部分を別の順序で表示する必要があります。 Razor/HTMLコードのブロックを分離し、適切な位置に「含める」にはどうすればよいですか? そのような何かを探して:私はそれにすべてのVARS、モデルや他のものを渡したくないので、MVC 3ビュー内のコードブロックの整列

@{ CODEBLOCK 1 
... 
} 

@{ CODEBLOCK 2 
... 
} 

@if (bla==1) { 
    include CODEBLOCK 1 
    include CODEBLOCK 2 
} else { 
    include CODEBLOCK 2 
    include CODEBLOCK 1 
} 

私は、HtmlPartialを使用する必要はありません。

答えて

7

あなたはヘルパーメソッドを使用することができますボーナスとして

@helper CodeBlock1() 
{ 
    ... 
} 

@helper CodeBlock2() 
{ 
    ... 
} 

@if (bla==1) { 
    CodeBlock1(); 
    CodeBlock2(); 
} else { 
    CodeBlock2(); 
    CodeBlock1(); 
} 

、それは安全で可能に引数を入力します。

+0

これはそれです:-) ちょっとした細かい変更:私は @ CodeBlock1();を使って、ヘルパーに入力されたときの出力を取得しました。 – Konrad

1

レイアウトセクションはどうですか?

http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

@section CODEBLOCK1 { 
... 
} 

@section CODEBLOCK2 { 
... 
} 

@if (bla==1) { 
    @RenderSection("CODEBLOCK1"); 
    @RenderSection("CODEBLOCK2"); 
} else { 
    @RenderSection("CODEBLOCK2"); 
    @RenderSection("CODEBLOCK1"); 
} 
+0

このアイデアはありましたが、@RenderSectionは直接呼び出された.cshtmlファイルでは機能しません。 – Konrad

+0

直接呼び出されるのはどういう意味ですか?私はエラーを取得する そして@RenderSectionを使用して @ Html.Action(「日付ピッカー」、「日付」、myRouteValues): –

+0

ビューを介して、他のビューで使用されている ファイル「〜/ビュー/日/ DatePicker.cshtml "RenderSection"メソッドを呼び出すため、直接要求することはできません。 – Konrad

0

私はMorten Christiansenのアプローチが好きですが、私がページ上で「ものごとを動かす」方法として捨てるもう一つのアプローチは、jQueryを使ってものがどこにあるかを調整することです。

このような何かを持つビューと仮定:スワップ行うかどうかを判断するために

<div id = "div1"> 
    Something 
</div> 
<div id = "div2> 
    Something Else 
</div> 

をして、いくつかのjQuery:再び

if (someCondition) 
{ 
    $('#div2').insertBefore('#div1'); 
} 

を、私は可能な他の一つとして、そこにそれを投げますどの方法が最初に来るのかを調整する方法がありますが、私は確かにモルテンの考え方が好きです。