为什么我的视图中有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>
答案 0 :(得分:112)
我想这个:
@{
Layout = "";
}
与此不同:
@{
Layout = null;
}
我使用第二个它正在工作,没有包含_Viewstart。
答案 1 :(得分:31)
你(和KMulligan)误解_ViewStart
页面。
_ViewStart
将始终执行
它旨在用于初始化属性(例如Layout
);它通常不应包含标记。 (因为无法覆盖它)。
正确的模式是创建一个单独的布局页面,调用RenderBody
,并将Layout
属性设置为指向_ViewStart
中的此页面。
然后,您可以在内容网页中更改Layout
,更改将生效。
答案 2 :(得分:15)
逻辑不应位于_viewStart
或View
中。在_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)
如果您正在使用应用程序,请尝试清洁解决方案。为我固定。