没有布局的剃刀视图

如何当我有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> 

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

我认为这 :

 @{ Layout = ""; } 

这不一样:

 @{ Layout = null; } 

我使用第二个,它的工作,没有_Viewstart包括在内。

你(和KMulligan)误解_ViewStart页面。

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

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

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

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

您的控制器操作应该:

 return PartialView() 

通过将这种types的逻辑放在视图中,可以打破M(数据),V(可视),C(逻辑)中的单一责任原则规则。

使用:

 @{ Layout = null; } 

摆脱_ViewStart中指定的布局。

我认为更好的工作与个人的“意见”,我试图从PHP转移到MVC4,它真的很难但即时通讯正确的方式… …

回答你的问题,如果你要工作的个人网页,只需编辑_ViewStart.cshtml

 @{ Layout = null; } 

另一个技巧,如果你得到一些CSSpath的问题…

在URL之前加上“../”

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

问候;

我想显示没有布局的login页面,这对我来说很好(这是_ViewStart.cshtml文件)。你需要在Controller中设置ViewBag.Title。

 @{ if (! (ViewContext.ViewBag.Title == "Login")) { Layout = "~/Views/Shared/_Layout.cshtml"; } } 

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

只要创build视图作为局部视图,以便不使用布局文件。

过程1:通过使用Views文件夹的根目录中的_ViewStart文件来控制布局渲染

此方法是初学者在ASP.NET MVC应用程序中控制布局渲染的最简单方法。 我们可以识别控制器并将布局渲染为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为我们提供了一个很好的特性和可传送性,通过在视图上定义布局来覆盖默认的布局渲染。 为了实现这一点,我们可以按照以下方式在每个视图中编写代码。

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

过程4:将_ViewStart文件放在每个目录中

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

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