没有布局的剃刀视图

68 asp.net-mvc layout razor asp.net-mvc-3

为什么我Layout = null;在我看来 - 它仍然拉入默认布局?!

是否有一些技巧可以阻止它这样做?

这是我没有布局的视图:

@{
    Layout = "";
}

<!DOCTYPE html>

<html>
<head>
    <title>Index</title>
    @{Html.RenderAction("Head", "Header");}
</head>
<body>
    <div>
        Home
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是渲染输出!!

<!DOCTYPE html>

<html>
<head>
    <title>Index</title>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
    <link href="/Content/Site.css" rel="stylesheet" type="text/css" />
    <script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
    <script src="/Scripts/modernizr-1.7.min.js" type="text/javascript"></script>
</head>

<body>
    header
</body>
</html>
</head>
<body>
    <div>
        Home
    </div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

小智 125

我认为这 :

@{
    Layout = "";
 }
Run Code Online (Sandbox Code Playgroud)

与此不一样:

@{
    Layout = null;
 }
Run Code Online (Sandbox Code Playgroud)

我使用第二个它正在工作,不包括_Viewstart.

  • 这个问题怎么回答不正确呢? (3认同)

SLa*_*aks 35

你(和KMulligan)是误解_ViewStart页面.

_ViewStart在您的页面开始之前将始终执行.
它旨在用于初始化属性(例如Layout); 它通常不应包含标记.(因为没有办法覆盖它).

正确的模式是创建一个单独的布局页面来调用RenderBody,并将Layout属性设置为指向此页面_ViewStart.

然后Layout,您可以更改内容页面,更改将生效.


小智 19

我认为使用个人"视图"更好的工作,我试图从PHP转向MVC4,它真的很难但我正确的方式......

回答你的问题,如果你要处理单个页面,只需编辑_ViewStart.cshtml即可

@{
  Layout = null;
}
Run Code Online (Sandbox Code Playgroud)

如果你遇到CSS路径的一些问题,另一个提示......

在网址前加上"../"

这是我今天遇到的两个问题,我就这样解决了!

问候;


Eri*_*ips 17

用于确定视图是否应该使用布局的逻辑不应该在_viewStart也不是View.设置默认值_viewStart很好,但在视图/ viewstart中添加任何布局逻辑可防止在其他任何地方使用该视图(使用或不使用布局).

您的控制器操作应该:

return PartialView()
Run Code Online (Sandbox Code Playgroud)

通过在视图中放置这种类型的逻辑,您可以打破M(数据),V(可视),C(逻辑)中的单一责任原则规则.


DMu*_*gan 11

你在这个目录中有_viewstart.cshtml吗?当我尝试使用_viewstart时,我遇到了同样的问题.然后我将它重命名为_mydefaultview,将其移动到views/shared目录,并切换到在我不想要的cshtml文件中指定视图,并为其余部分指定_mydefaultview.不知道为什么这是必要的,但它有效.

  • 你误解了`_ViewStart`.看我的回答. (4认同)

小智 9

使用:

@{
    Layout = null;
 }
Run Code Online (Sandbox Code Playgroud)

摆脱_ViewStart中指定的布局.