没有布局的剃刀视图

时间:2011-07-07 16:07:20

标签: asp.net-mvc asp.net-mvc-3 layout razor

为什么我的视图中有Layout = null; - 它仍会提取默认布局?!

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

这是我没有布局的视图:

@{
    Layout = "";
}

<!DOCTYPE html>

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

这是渲染的输出!!

<!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>

11 个答案:

答案 0 :(得分:112)

我想这个:

@{
    Layout = "";
 }

与此不同:

@{
    Layout = null;
 }

我使用第二个它正在工作,没有包含_Viewstart。

答案 1 :(得分:31)

你(和KMulligan)误解_ViewStart页面。

在页面开始之前,

_ViewStart始终执行 它旨在用于初始化属性(例如Layout);它通常不应包含标记。 (因为无法覆盖它)。

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

然后,您可以在内容网页中更改Layout,更改将生效。

答案 2 :(得分:15)

用于确定视图是否应使用布局的

逻辑不应位于_viewStartView中。在_viewStart中设置默认值很好,但在视图/ viewstart中添加任何布局逻辑可以防止该视图在其他任何地方使用(使用或不使用布局)。

您的控制器操作应该:

return PartialView()

通过在视图中放置这种类型的逻辑,您可以打破M(数据),V(可视),C(逻辑)中的Single responsibility principle规则。

答案 3 :(得分:13)

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

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

@{
  Layout = null;
}

如果您在使用CSS路径时遇到一些问题,请另外提示......

在网址之前加上“../”

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

问候;

答案 4 :(得分:9)

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

答案 5 :(得分:9)

使用:

@{
    Layout = null;
 }

去掉_ViewStart中指定的布局。

答案 6 :(得分:3)

我想显示没有布局的登录页面,这对我来说非常有用。(这是_ViewStart.cshtml文件) 您需要在Controller中设置ViewBag.Title。

thin start -p 3001 --ssl --ssl-key-file E:/demo1/server.key --ssl-cert-file E:/demo1/server.crt

我知道这有点晚了,但我希望这有助于某些身体。

答案 7 :(得分:1)

只需将视图创建为部分视图,以便不使用任何布局文件。

答案 8 :(得分:1)

步骤1:使用Views文件夹根目录中的_ViewStart文件控制布局呈现

此方法是初学者控制ASP.NET MVC应用程序中的Layouts渲染的最简单方法。我们可以识别控制器并将Layouts渲染为par控制器,为此,我们可以在Views文件夹的根目录中的_ViewStart文件中编写代码。以下是一个示例,说明如何完成。

 @{
 var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["Controller"].ToString();
 string cLayout = "";
 if (controller == "Webmaster") {
 cLayout = "~/Views/Shared/_WebmasterLayout.cshtml";
 }
 else {
 cLayout = "~/Views/Shared/_Layout.cshtml";
 }
 Layout = cLayout;
 }

过程2:通过从ActionResult返回来设置布局

ASP.NET MVC的一大特色就是,我们可以通过从ActionResult返回布局来覆盖默认的布局渲染。因此,这也是一种在ASP.NET MVC应用程序中呈现不同布局的方法。下面的代码示例展示了如何完成它。

public ActionResult Index()
{
 SampleModel model = new SampleModel();
 //Any Logic
 return View("Index", "_WebmasterLayout", model);
}

程序3:视图布局(通过在顶部的每个视图中定义布局)

ASP.NET MVC为我们提供了如此出色的功能。通过在视图上定义布局来覆盖默认布局呈现的faxibility。为了实现这一点,我们可以在每个View中以下列方式编写代码。

@{
   Layout = "~/Views/Shared/_WebmasterLayout.cshtml";
}

程序4:在每个目录中放置_ViewStart文件

这是为ASP.NET MVC应用程序中的每个Controller设置不同布局的非常有用的方法。如果我们想要为每个目录设置默认布局,我们可以通过将_ViewStart文件放在每个目录中并使用所需的布局信息来实现,如下所示:

@{
  Layout = "~/Views/Shared/_WebmasterLayout.cshtml";
}

答案 9 :(得分:0)

@{ viewbag.title="index" 布局 = 空; }

答案 10 :(得分:-2)

如果您正在使用应用程序,请尝试清洁解决方案。为我固定。