1

多くのビューがあり、それぞれが非常によく似たコンテンツを表示しているとします。各ビューは、_ViewStartで定義されているものと同じ_Layoutを使用します。

私の_Layoutは次のようになります。

<html>
<!-- some html -->
@ViewBag.SomeViewBagFun
<!-- more html -->
@RenderBody
<!-- more html -->
@SpecialFunction()
</html>

Helper SpecialFunction()
@<a href="/">Linky</a>
@<!-- complex HTML -->
End Helper

私のページの90%がSpecialFunction()レイアウトで定義されているデフォルトを使用していると仮定しますが、一部のビューでは別のを必要とする場合がありますSpecialFunction()

これを解決する1つの方法は、ViewBag各ビューコンテンツをそのように使用して送信することですがSpecialFunction()、複雑なHTMLが含まれているため、かみそりのビューを使用したいと思います。

どうすればこれを達成できますか?

4

4 に答える 4

1

これを行う最良の方法は、セクションを使用することです。セクションをレンダリングするときに、セクションを不要にします。

詳細については、ScottGuのブログを参照してください:http ://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

于 2013-03-12T00:31:36.047 に答える
0

実際のレイアウトを指定することができますView

@{
    Layout = "/address/to/your/different/layout.cshtml"
}

詳細については、この質問をご覧ください。

于 2013-03-12T00:16:18.373 に答える
0

ここでOP。

ASP.NET MVC&Razorを使用してからしばらく経ちました。セクションを忘れてしまいました。ばかげている^^

解決:

_Layout

<html>
<!-- some html -->
@ViewBag.SomeViewBagFun
<!-- more html -->
@RenderBody
<!-- more html -->
@If IsSectionDefined("SpecialFunction") Then
    @RenderSection("SpecialFunction", False)
Else
    @SpecialFunction()
End If

</html>

Helper SpecialFunction()
@<a href="/">Linky</a>
@<!-- complex HTML -->
End Helper

Another View

Section SpecialFunction
<p>Very different HTML!</p>
End Section
于 2013-03-12T00:31:36.593 に答える
0

ビューバッグに条件を追加し、レイアウトがspecialFfunctionまたはsomeOtherFunctionを実行する値に基づいて、ScottGuthrieがブログでこの手法の優れた例を示しています。

于 2013-03-12T00:35:27.037 に答える