我是MVC Development的新手,已经开始使用新的MVC 4应用程序来构建一种个人投资组合。我无法弄清楚为什么我的_Layout.cshtml
没有在我的家中呈现或默认View
。我已经检查了以下内容:
App_Start/RouteConfig.cs
文件以来未被修改过
应用程序已创建。 Views/Shared/_ViewStart.cshtml
有
以下(默认):
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
查看/共享/ _Layout.cshtml:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale = 1.0" />
<title>Portfolio</title>
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/bootstrapjs")
@Scripts.Render("~/bundles/customJs")
<link href="~/Content/bootstrap.css" rel="stylesheet" />
<link href="~/Content/bootstrapMod.css" rel="stylesheet" />
<link href="~/Content/Site.css" rel="stylesheet" />
</head>
<body style=""zoom: 1">
<div class="container mainContent">
<div class="page-header hidden-sm hidden-xs">
@Html.Partial("_Header")
</div>
<nav id="navBar" class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse">
☰
</button>
<a class="navbar-brand hidden-lg hidden-md" href="/Home">Portfolio</a>
</div>
<!-- Collect the nav links, forms, and other content for toggling -->
<div class="collapse navbar-collapse" id="navbar-collapse">
@*@Html.MvcSiteMap().Menu()*@
</div>
</div>
</nav>
<div class="container">
@RenderSection("scripts", required:false)
<div class="pageTitle largeFontSize">
@ViewBag.HeaderTitle
</div>
@RenderBody()
</div>
</div>
<div id="footer">
Copyright 2014 - Portfolio - <a target="_blank" href="/terms-and-conditions-of-us.html">Website Terms & Conditions of Use</a>
</div>
</body>
</html>
〜/查看/共享/ _Header.cshtml
<div class="row">
<div class="col-md-6">
<div>
<a href="~/Home">
<img src="~/Content/Images/Header.png" class="img-responsive"/>
</a>
</div>
</div>
<div class="col-md-6 box">
@if (Request.IsAuthenticated)
{
<div class="profileLinks">
<a href="#">My Projects</a>
|
<a href="#">Contact Profile</a>
</div>
<div class="content logout">
<div class="row">
<div>
Hi, @User.Identity.Name
@Html.ActionLink("Log Off", "LogOff", "Account", new {},new { @class = "btn btn-primary btn-sm" })
</div>
</div>
</div>
}
else
{
<div class="content">
<div class="row">
<div class="col-md-4">
<input type="text" id="username" placeholder="E-mail" required tabindex="1"/>
<a href="#" ><h6>Forgot your username?</h6></a>
</div>
<div class="col-md-4">
<input type="password" id="password" placeholder="Password" required tabindex="2" onkeyup="EnterKeyPressed()"/>
<a href="#" ><h6>Forgot your password?</h6></a>
</div>
<div class="col-md-4">
<input type="button" id="loginButton" value="Login" onclick="login()" class="btn btn-primary btn-sm" tabindex="3" onkeyup="EnterKeyPressed()"/>
<br />
<input type="checkbox" id="rememberMe">Remember Me
</div>
</div>
</div>
}
</div>
</div>
我的默认视图加载,但没有任何内容。标题更改为“索引”,其余为空白页。 ~/Views/Shared/_Layout.cshtml
不应该以某种方式在此页面内呈现吗?
根据我目前设置的内容,当共享的_Layout.cshtml
加载到我的Home/Index/
视图中时,我应该会看到我在共享视图中创建并获取的页眉图像。
查看/主页/ Indx.cshtml
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
</div>
</body>
</html>
当我尝试Layout = "~/Views/Shared/_Layout.chtml";
时,它错误地说在指定的路径上找不到它。我是一个开发人员朋友发给我的一个例子的半工作,并且有了它,他们没有明确地设置Layout
?
答案 0 :(得分:7)
一些事情......
如果您有一个视图,您试图在共享视图中进行渲染,那么您不需要将其放入视图中的任何HTML布局元素。让我们从真正的基础开始。
查看开始
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
_Layout.cshtml
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>@ViewBag.Title</title>
</head>
<body>
@RenderBody()
</body>
</html>
主页视图
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
现在主页视图会显示@RenderBody()
出现的位置。因此索引将是页面中的标题2。标题在ViewBag
对象中传递,并在_Layout.cshtml
文件中设置为页面标题,其中包含以下@ViewBag.Title
答案 1 :(得分:4)
删除Index.cshtml中的以下内容
@{
Layout = null;
}
此代码告诉渲染引擎不使用共享布局。您也不需要索引中的任何HTML pre-amble(HTML,HEAD或BODY标记)。
答案 2 :(得分:1)
删除
@{ Layout = null }
或明确将其设置为“〜/ Views / Shared / _Layout.cshtml”;但这不太可取。
它覆盖了_ViewStart行为。
此外,您不需要在index.cshtml视图中包含这些标记,因为它们包含在_Layout.cshtml中。
基本上发生的事情是您正在创建一个包含_Layout的包装页面,您可以在其中放置网站中常见的内容(例如页眉,页脚,某些导航)。然后创建一个视图,在本例中为index.cshtml,它构成页面的主体。 _Layout.cshtml和Index.cshtml被编译成单个页面,_Layout.cshtml就像是一个围绕Index.cshtml的包装器。