没有布局的剃刀视图
如何当我有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是否应该使用布局的逻辑不应该在_viewStart
和View
。 在_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"; }