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().

解决此问题的一种方法是以这种方式使用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

在这里。

自从我使用 ASP.NET MVC 和 Razor 以来已经有一段时间了。我忘记了Sections。我觉得很傻^^

解决方案:

_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

您可以在实际中指定布局View,因此,

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

查看此问题以获取更多信息。

于 2013-03-12T00:16:18.373 回答
0

您可以将条件添加到您的视图包,并根据布局将执行 specialFfunction 或 someOtherFunction 的值Scott Guthrie 在他的博客中给出了这种技术的一个很好的例子

于 2013-03-12T00:35:27.037 回答